zoukankan      html  css  js  c++  java
  • C#3.0 新特性学习笔记(3):匿名类型

     有些时候我们需要临时保存一些运算的中间结果,特别是当这些中间结果是由多个部份组成时,我们常常会去声明一个新的类型,

    以方便保存这些中间结果。表面上看起来这很正常,而细想之后就会发现,这个新类型只服务于这个函数,其它地方都不会再使用它了,

    就为这一个函数而去定义一个新的类型,确实有些麻烦。

    现在,C#3.0中的匿名类型特性就可以很好的解决上面提到的问题,通过匿名类型,我们可以简单使用

       new { 属性名1=值1, 属性名2=值2, ..... , 属性名n=值n }

    的形式直接在函数中创建新的类型,{ }是匿名初始化器。

    对象:

    看下面这个例子:

    class AnonymousType : AppRunner.AbstractApplication 

     
    public override void Run() 
     { 
      var anonymousType1 
    = new { 
       CardNumber 
    = "10001", Name = "van’s", Sex = true 
      }; 

      Console.WriteLine(anonymousType1.CardNumber); 
      Console.WriteLine(anonymousType1.Name); 

      var anonymousType2 
    = new { 
       CardNumber 
    = "10002", Name = "martin", Sex = true 
      }; 

      anonymousType2 
    = anonymousType1; 
     } 
    }


    在新类型中只能有字段成员,而且这些字段的类型也是通过初值的类型推断出来的。如果在声明新的匿名类型时,新类型的字段名、

    顺序以及初始值的类型是一致的,那么将会产生相同的匿名类型,所以上例中anonymousType1和anonymousType2的类型是相同的,

    自然能进行anonymousType2=anonymousType1的赋值。


    关于这点,可以参考如下比较:

    var p1 = new { name = ”reallypride”, age = 23 }; 
    var p2 
    = new { name = “jingxuan”, age = 23 }; 

    那么,编译器会自动定义一个包含nameage属性的类。p1p2结构相同,是同一个类的实例。

    下面,我们再定义一个变量,

    var p3 = new { age = 23, name = “reallypride” }; 

    表面上来看,意义是一样的,但是语法不同,这样编译器会新建一个新的类,也就是p3p1,p2不是同一个类的实例,因为p3声明属性的位置不相同。

    数组:

    如果要定义数组,可以这样定义:

    var intArray = new[] { 1234 }; 
    var strArray 
    = new[] { “a”, “b”, “c” }; 
    var someTypeArray 
    = 
               
    new[] { 
                      
    new { name = “reallypride”, age = 23 }, 
                      
    new { name = “jingxuan”, age = 23 } 
                     };

    匿名类型要点:

    1. 可以使用new关键字调用匿名初始化器创建一个匿名类型。
    2. 匿名类型直接继承自System.Object
    3. 匿名类型的属性是编译器根据初始化器自动推断。

    匿名类型常和var一起使用。

  • 相关阅读:
    Java核心技术 卷一 笔记四 库类的直接使用
    Java核心技术 卷一 笔记三 大数值及数组
    Java核心技术 卷一 笔记2 字符串的复制
    Java核心技术 卷一 笔记1
    修改css 样式后, hover事件 不生效
    修改 element ui input 输入框 样式不生效问题
    css3 计算属性
    Vue3 改动系列
    浏览器实现,向下滑动 鼠标滚轮,页面横向移动
    linux ceont0s7 vue 打包压缩图片 一直报错
  • 原文地址:https://www.cnblogs.com/Dlonghow/p/1313317.html
Copyright © 2011-2022 走看看