特性一:类型的智能推演
C#语言属于静态语言,类型的推演实际是由编辑器来完成;
public void Main(){
var i = 1;
var s = "dfdsf";
}
编辑器依据你的赋值自动给出类型,但是你不能赋NULL值;
另外
public void Main(){
var i = 1;
i= “哦我认为任务”;
} 这样也是不被允许的,因为i已经是整型了;
特性二:CLR类型的扩张功能
比如string这个类型在3.0之前,我们只能使用它提供的方法;无法继承,因为它是密封类型;
public static Class Helper {
public static bool IsIn(this object a, IEunmerable b){
foreach(object o in b){
if(a == o)
return true;
}
return false;
}
}
Console.Write("sdsd".IsIn(new string[]{"sasa","sdsd"}));
需要注意的是,必须是静态类和静态方法;
特性三:自动属性
public class Helper{
public string Name{get; set;}
public string Sex{get; private set;}
public Helper(string sex){
this.Sex = sex;
}
}
自动属性其实没什么用,无非就是少记两个快捷键;不过和之前不一样的是,,可以在方法体内部指定访问级别;如上例,Sex属性只能内部访问;
特性四:对象初始化器
var o = new Helper("男") {Name = "Gaby"};
3.0新增的这个功能,貌似在 C++里就有了;也没多大用处;这里注意一点,构造函数的要优先于初始化器;
特性五:集合的初始化
var list = new List<Helper>{
new Helper("男") {Name = "Gaby"};
}
特性六:Lamada表达式
这是很有用的功能;具体使用有点像匿名方法;格式如下:
(参数)=>{表达式或方法体}
delegate void Printer(string a,string b)
TestClass{
Main()
{
Printer p = delegate(string a,string b){
Console.Write(a+b);
};
p("hellow","world");
Printer p1 = (a,b)=>a+b;
p1"hellow","world");
}
}