索引:
1、动态查找 —— dynamic
动态查找允许在编写方法、运算符和索引器调用、属性和字段访问甚至对象访问时,绕过C#静态类型检查,而在运行时进行解析。
在编译时,会假设动态对象支持任何操作,而如果它不支持某个操作,则只有到运行时才能得到错误。
C#4.0引入了新的静态类型,称为 dynamic 。当你拥有了一个 dynamic 类型的对象后,你“对它做的事情”只会在运行时进行解析。
dynamic d = GetDynamicObject(…);
d.M(7);
C#编译器允许你使用任何参数在d上调用一个方法,因为它的类型是 dynamic 。
运行时会检查d的实际类型,并检测在它上面“用一个int调用M”是什么意思。
不仅是方法调用,字段和属性访问,索引器和运算符调用甚至委托调用都可以动态的分派。
dynamic d = GetDynamicObject(…);
d.M(7); // 方法调用
d.f = d.P; // 字段和属性访问
d[“one”] = d[“two”]; // 通过索引访问
int i = d + 3; // 运算符调用
string s = d(5,7); // 委托调用
dynamic d1 = new Foo();
dynamic d2 = new Bar();
string s;
d1.M(s, d2, 3, null);
本质等价于:“使用下面的参数执行一个称作M的实例方法”:
1、一个string
2、一个dynamic
3、一个int,值为3
4、一个object,值为null
具体示例代码:
2、可选(默认)参数
在方法定义的时候为参数指定一个默认值。
调用方法的时候既可以像平时那样传入参数,也可以直接跳过不传入,这样的话,就使用默认值传到方法里。
示例代码:
值得注意一点的是,可选参数必须放在所有参数的最后。这里就有个问题了,假如某个方法有两个参数,两个都是可选参数,
而我调用的时候只想传入第二个参数,怎么办呢?我们来试试
}
但很可惜,编译通不过,这个问题,利用下面的新特性就可以解决了。
3、命名参数
在之前版本的C#中,方法定义的参数顺序必须与方法调用时的参数顺序一致,
即方法 Method(int i,string s) 调用时就必须第一个传入 int ,第二个传入 string ,而现在,这个规矩可以被打破了。
你可以自己随便什么顺序传入,这也在一定程度上提高了代码的可读性。
示例代码:
这样一来,上面的那个问题就可以迎刃而解:
谢谢。。。