C#3.0新特性

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1、自动属性

下面两种写法作用相同

public int Age { get; set;}

PRivate int age;

public int Age

{

get { return age; }

set { age = value; }

}

//上面两种写法的区别等同于中国、中华人民共和国的区别

2、可空类型

对于值类型而言,在定义的同时必须要赋与具体的值,否则可能无法通过编译.但是在某些情况下,用户事先不知道它的值是多少,比如无法事先知道学生的年龄.因为将年龄定义为可以为空的类型就显得很重要.

值类型包括:int\double\float\decimal\bool\char\sturct可为空的语法为:Nullable<T>,其中T指代上面具体的某种类型比如,可以为空的int类型:Nullable<int>;可以为空的bool类型:Nullable<bool>可以为空的变量,在赋值时,可以将null赋值给它 例如:Nullable<int> age = null;

Nullable<T>可以简写为:T? 例如:int? age = null;等价于Nullable<int> age = null;下面两种写法都是错误的.因为string和Student都是引用类型string? name = null; Student? Stu = null;可空类型的常用属性:HasValue:布尔类型,如果字段不为null返回true,否则返回false.Value:获取字段的值,如果该字段的值为null,那么调用Value属性会报错

3、泛型类

List<T>:T可以指代任何类型,比如:int\bool\string\Student\...Dictionary<T, K>:字典类,其中T和K可以指代任何类型KeyValuePair<Tkey, Tvalue>:键值对类型4、对象初始化器

示例:

Student stu = new Student(){Name = "张三" , Age = 18 };

5、集合初始化器

示例:

List<Student> stuList=new List<Student>()

{

stu,

new Student(){Name="李四" , Age = 20 }

};

6、var关键字

var用于定义变量,变量的类型根据值来确定.var a = 5; 因为5是int类型,所以a的类型也是intvar stu = new Student();因为通过new创建的是Student类型的变量,所以stu是Student类型.注意1:var b;这种写法是错误的.原因是由var声明的变量,必须在定义的同时就初始化.

注意2:通过var声明的变量一旦实例化后,就不能再更改它的数据类型.例如下面的代码:

var a = 5; a = “zhangsan”;//a=”zhangsan”报错

7、匿名类型

在实例化一个类对象时,可以无须事先定义该类,通过new{}即可动态创建类对象.

示例:

var preson=new { Name="王五" , Sex = "男"};

8、扩展方法

给以前定义好的类扩展其他的方法.

首先定义一个静态类(类的名称没有限制)在静态类中定义一个静态方法(方法返回值根据实际情况自定定义)给上述静态方法添加一个参数,该参数必须被this关键字修饰.上面参数的类型就是该扩展方法所扩展的类型示例:Student的扩展方法

publicstaticclass StudentExtention

{

publicstaticstring ConsoleStudent(thisStudent stu)

{

if (!stu.Age.HasValue)

{

stu.Age = 18;

}

string str="姓名:" + stu.Name + "\n" + "性别:"+stu.Sex+"\n"+"年龄:"+stu.Age;

return str;

}

}

9、匿名类型和Lambda表达式

什么是委托:委托允许将一个方法作为参数,传递给另外一个方法.委托和挂载的方法:参数个数\参数类型\参数顺序\返回值类型必须要一致.示例:

但是上述方式,使用很复杂.我们可以通过匿名方法来简写上述功能.Lambda表达式也是匿名方法的一种快速写法.

Lambda表达式分3部分 : 参数 | => | 表达式

下面的代码演示了如果使用Lambda表达式改写委托的示例

注意1:如果Lambda表达式只有1个参数,那么参数可以不用()包裹

注意2:Lambda表达式部分可以使用{}包裹,也可以不包裹.如果有多行代码,必须要使用{}包裹起来.

由此:在出现委托(Func参数)的地方,我们就可以写Lambda表达式.

Func<T, K>是一个泛型委托.该委托的参数类型为T,返回值类型为K.

Lambda表达式的参数arg的类型为T,Lambda的表达式部分返回值类型为K.

10、分部类

关键字:partial

partial是一个类修饰符,用于把类定义拆分为几个部分,便于代码管理

ending......

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航