1.dynamic和var不能混为一谈。
var声明局部变量只是一种简化语法,var要求编译器根据之后的表达式推断具体的数据类型。
var只能用于声明方法内部的局部变量,dynamic则可用于局部变量、字段和参数。
表达式不能转型成var,但能转型成dynamic。
使用var的时候,变量必须显示初始化。dynamic则无须初始化。比如说
var i;//报错 var k=1;//正确 dynamic j;//正确
2.可以使用out或者ref参数对方法进行重载。
但是如果两个重载方法只有out和ref的区别,这就是不合法的,因为两个签名的元数据表示完全相同。
如下是可以通过编译的:
public void Fun1(string x) { } public void Fun1(ref string x) { }
但是如果在加上一个out的,如下所示,则编译会报错:
public void Fun1(string x) { } public void Fun1(ref string x) { } //报错信息:Error 1 Cannot define overloaded method 'Fun1'
// because it differs from another method only on ref and out public void Fun1(out string x) { x = "x"; }
3.可变数量的参数。关键字params,这个关键字只能应用于方法签名的最后一个参数。示例:
public static Int32 Add(params Int32[] values) { Int32 sum = 0; if (values != null) { for (Int32 i = 0; i < values.Length; i++) { sum += values[i]; } } return sum; }
调用Add(1, 2, 3),结果为6
4.像public String Field { get; set; }这样属性极简化写法不能实现序列化和反序列化。