zoukankan      html  css  js  c++  java
  • C#3.0笔记(四)对象初始化器与匿名类型

    在上一篇文章中介绍过C#3.0的新特性var关键字已经扩展方法,这一篇blog中将会介绍下对象初始化器以及匿名类型。

    初识对象初始化器

    首先我们来看一个Employee类型:

        public class Employee
        {
            public string FirstName{ get; set; }
    
            public string LastName { get; set; }
    
            public int Age { get; set; }
        }

    在c#2.0里面我们要定义一个Employee对象时莫非于这样:

        Employee e = new Employee();
        e.FirstName = "Henllyee";
        e.LastName = "Cui";
        e.Age = 23;

    在c#3.0里面提供了一种简洁的方式让我们来定义和初始化一个Employee对象:

        var employee = new Employee { Age = 10, FirstName = "Henllyee", LastName = "Cui" };

    这样我们只需要少量的代码就完成了一个对象的初始化。

    集合的初始化

    由对象初始化,我们很快就能联想到集合初始化的语法。

        List<Employee> listEm = new List<Employee>
        {
            new Employee{ Age=23, FirstName="Henllyee", LastName="Cui"},
            new Employee { Age=25, FirstName="Fred", LastName="Zhang"}
        };

    新的初始化确实为我们带来了方便,这种语法结构更像数组初始化时的语法。

    匿名类型

    在很多时候我们需要定义一个类型只需要在本程序中使用,而不需要项目间重用,在C#2.0里面我们需要完整地定义这样的类型:

    public class SomeClass
    {
        //方法
        //属性
        //字段
        //...
    }

    也许这样定义一个类并不是很大的工作量,但是如果需要封装很多数据成员的话,那就太消耗我们的体力了。C#3.0里面提供了新的语法让我们来定义一个匿名类型:

        var em = new { FirstName = "Henllyee", Age = 23, LastName = "Cui" };

    要注意的是在定义匿名类型时,我们只能用var关键字去申明。匿名类型都是自动继承于System.Object,因此它们支持Object的每一个成员,如:ToString()。我们可以通过前面一节定义的辅助方法来看看:

        var em = new { FirstName = "Henllyee", Age = 23, LastName = "Cui" };
        Console.Write(em.DisplayDefinigAssembly());

    结果:

    image

    我们可以看到编译器给我们分配了一个类型。

    嵌套的匿名类型

        var em = new { FirstName = "Henllyee", Age = 23, LastName = "Cui",
            Depart = new {DepartID=1,DepartName="项目中心"}
        };

    上面的例子就是在里面再添加一个匿名类型来表示部门信息的。

    在使用匿名类型时我们一定要注意,不要因为匿名类型放弃使用强类型的类或结构。其实匿名类型在Linq查询的时候用的比较多,同时我们在使用的时候还要注意以下几点:

    1) 没有控制类型的名称;

    2)匿名类型都是继承于System.Object;

    3)匿名类型的创建只能使用默认的初始化;

    4)匿名类型不支持事件,自定义方法,自定义重写;

    5)匿名类型是隐式封闭的。

    下一篇:C#3.0笔记(五)Lambda表达式

    作者:Henllyee Cui
    出处: http://henllyee.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
  • 相关阅读:
    vue使用laydate.js插件报错laydate.css: Invalid
    自定义css样式结合js控制audio做音乐播放器
    福利福利~262集前端免费视频!
    解决Vue在IE中报错出现不支持=>等ES6语法和“Promise”未定义等问题
    设置Chart.js默认显示Point点的值不用鼠标经过才显示
    js监听某个元素高度变化来改变父级iframe的高度
    Vue中注意target和currentTarget的使用
    VUE中让由全局变量添加生成的新数组不随全局变量的变化而变化
    bootstrap-table前端实现多条件时间段查询数据
    js小数点相乘或相除出现多位数的问题
  • 原文地址:https://www.cnblogs.com/Henllyee/p/1492397.html
Copyright © 2011-2022 走看看