Framework3.0学习笔记(一): 新特性(1)

3.0新特性:

1、var 隐式类型

    C#一直是一个类型定义非常严格的语言,任何变量的定义,必须明确定义它的类型。但在Framework3.0中增加了var关键字,var并不是任何类型,它只是定义隐式类型变量的关键字。

如:var s="Hello";

     var n=new[]{1,2,3};    在定义数组时,隐式类型不用带[]。

用var声明的变量时,不用显示的定义变量的类型,编译器会在初始化时根据表达式推断变量的类型,这并不表示变量的类型是可变的,只是交给编译器来判断。也就限制了用var定义的变量必须有初始值,这样编译器才可以根据初始值进行判断。var也可以定义表达式变量,

如:var num=a+b;   num表示a+b的结果,类型编译器会自动判断。

var在定义匿名类型时非常有用,而且在LINQ中的使用也非常广泛。

其实var在script脚本中早已经存在了,但在使用上还是有些区别的。

如 var s;

这样定义是绝对不可以的,因为编译器无法判断s的类型。此外var也不能定义复杂的多维数组。

 

2、自动实现的属性

例:

class Customer
{

     // Auto-implemented properties
     public int CustomerID { get; private set; }  // read-only
     public string FirstName { get; set; }     
    
public string LastName { get; set; }  

}

当属性访问器中不需要其他逻辑时,自动实现的属性可使属性声明变得更加简洁自动实现的属性必须同时声明get 和set 访问器。若要创建readonly 自动实现属性,请给予它private set 访问器。 自动实现的属性(Property) 不允许具有属性 (Attribute),也就是不允许在属性前面定义方括号形式的属性。

 

3、初始值设定项

对象初始值设定项:

使用对象初始值设定项,可以在创建对象时向对象的任何可访问的字段或属性直接分配值,而无需显示的调用构造函数。

Customer cus=new Customer { FirstName="Tom" , LastName="Cruise" };

集合初始值设定项:

使用集合初始值设定项可以在初始化一个实现了IEnumerable的集合类时指定一个或多个元素初始值设定项。元素初始值设定项可以是简单的值,也可以是表达式或对象初始值设定项。通过使用集合初始值设定项,无需在源代码中指定多个对该类的Add 方法的调用;编译器会添加这些调用。

初始值 方式一:List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
初始值 方式二: List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() };

初始值 方式三:

List<Cat> cats = new List<Cat>
{
     new Customer { FirstName="Tom" , LastName="Cruise" } ,
     new Customer { FirstName=" Will", LastName="Smith"},

     null

}

4、匿名类型

var cat=new{name="zzz",age="18"};

以匿名的方式创建了一个对象,包含 name和age 两个属性,并已经赋值。对象类型在创建时编译器会定义它的类型,并为其提供一个名称,但我们并不知道这个类型是什么,所以只能用var去引用这个变量。这并不影响我们对变量的使用,输出 cat .name,也会得到"zzz"的结果。

匿名类型是使用new 运算符和对象初始值设定项创建的,由一个或多个公共只读属性组成的类类型。不允许包含其他种类的类成员(如方法或事件)。它提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。如果两个或更多个匿名类型以相同的顺序具有相同数量和种类的属性,则编译器会将这些匿名类型视为相同的类型,并且它们共享编译器生成的相同类型信息。

例:

var cat=new{Name="zzz",Age="18"};

var ADD=new{Address="北京",ZipCode="100100"};

编译器会认为这两个对象是同一 匿名 类型。并且只有当同一匿名类型的两个实例的所有属性都相等时,这两个实例才相等。

匿名类型,在某些情况下使用会给我们带来很大方便,但不可忽视的是, 因为我们不知道所用的变量是什么类型,也不知道它都具备什么属性,所以 它的可读性很差,建议尽可能少的使用它。

 

 

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值