• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#的隐式类型、匿名类型、自动属性、初始化器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.隐式类型

1)源起
在隐式类型出现之前,我们声明一个变量时,需要为它指定相应的类型,甚至在foreach一个集合的时候,也要为遍历的集合元素,指定变量的类型,隐式类型出现后,程序员就不用再做这个工作了。
2)使用方法
来看看下面的代码:

  1. var a=1;//int a=1;
  2. var b="123";//string b="123";
  3. var myObj=new MyObj();//MyObj myObj=new MyObj();

上面的每行代码,与后面的注释起到的作用完全一样。也就是说,在声明一个变量(并且同时给它赋值)的时候,完全不用指定变量的类型,只要一个var就可以解决问题。
3)这样做会降低性能吗?
不会!上面的代码和注释里的代码,编译后产生的IL代码(中间语言代码)是完全一样的(编译器会根据变量的值,推导出变量的类型,才产生IL代码)
4)这个关键字的好处:
在foreach一个集合时,可以使用var关键字代替书写循环变量的类型;(其它待发现。。)
5)注意事项
你不能用var关键字声明变量时不给它赋值,因为编译器无法推导出变量的类型。

2.匿名类型

1)源起
创建一个对象,一定要先定义这个对象的类型吗?不一定,看看下面的代码
2)使用

  1. var oddsAndEnds = new[]{
  2. new {Name="MVC" , Category="Pattern"},
  3. new {Name="Hat" , Category="Clothing"},
  4. new {Name="Apple" , Category="Fruit"}
  5. };
  6. StringBuilder result = new StringBuilder();
  7. foreach (var item in oddsAndEnds) {
  8. result.Append(item.Name).Append(" ");
  9. }

new关键字之后就直接为对象定义属性,并为这些属性赋值。而且,对象创建出来之后,在创建对象的方法中,还可以畅通无阻的访问对象的属性。
通过结合对象初始化器和类型推断,可以创建简答的数据存储对象,而不需要定义相应的类或结构。

3.自动属性

1)源起
为一个类定义属性,我们一般会写如下的代码

  1. public class product
  2. {
  3. private string name;
  4. private int price;
  5. public string Name
  6. {
  7. get { return name; }
  8. set { name = value; }
  9. }
  10. public int Price
  11. {
  12. get { return price; }
  13. set { price = value; }
  14. }
  15. }

但很多时候,这些私有变量对我们一点用处都没有,比如对象关系映射中的实体类。自C#3.0引入了自动实现的属性,以上代码可以写成如下形式:

  1. public class product
  2. {
  3. public string name { get; set; }
  4. public int price { get; set; }
  5. }

4.对象初始化器和集合初始化器

1)源起
我们创建一个对象并给它的属性赋值,代码一般写成这样子:

  1. var product=new Product();
  2. product.name="小米";
  3. product.price=3;

自C#3.0引入对象初始化器,代码可以写成如下形式:

  1. var product=new Product(){name="小米",price=3};

集合初始化器如下定义:

  1. var arr=new List<int>(){1,2,3,4,5,6};

参考资料:

30分钟LINQ教程
精通ASP.NET MVC 4


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c++指针空间大小的决定因素发布时间:2022-07-14
下一篇:
C语言mmap()函数(建立内存映射)与munmap()函数(解除内存映射)发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap