zoukankan      html  css  js  c++  java
  • C# 对象集合初始化

    一、自动实现的属性

        public class Person
        {
            // C# 3之前我们定义属性时,一般会像下面这样去定义
            // 首先会先定义私有字段,再定义属性来对字段进行访问
            //private string _name;
            //public string Name
            //{
            //    get { return _name; }
            //    set { _name = value; }
            //}
    
            // C# 3之后有自动实现的属性之后
            // 对于不需要额外验证的属性,就可以用自动实现的属性对属性的定义进行简化
            // 不再需要额外定义一个私有字段了,
            // 不定义私有字段并不是此时没有了私有字段,只是编译器帮我们生成一个匿名的私有字段,不需要我们在代码中写出
            // 减少我们书写的代码
            // 下面就是用自动实现的属性来定义的一个属性,其效果等效于上面属性的定义,不过比之前更加简洁了
    
            /// <summary>
            ///  姓名
            /// </summary>
            public string Name { get; set; }
        }

    二、对象初始化

        class Program
        {
            static void Main(string[] args)
            {
                Person person1 = new Person();
                person1.Name = "learning hard";
                person1.Age = 25;
                Person person2 = new Person("learning hard");
                person2.Age = 25;
                // 如果类没有无参的构造函数就会出现编译时错误
                // 因为下面的语句是调用无参构造函数来对类中的字段进行初始化的
                // 大括号部分就是对象初始化程序
                Person person3 = new Person { Name = "learning hard", Age = 25 };
                // 下面代码和上面代码是等价的,只不过上面省略了构造函数的圆括号而已
                Person person4 = new Person() { Name = "learning hard", Age = 25 };
                Person person5 = new Person("learning hard") { Age = 25 };
            }
        }
    
        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; }
    
            public Person()
            {
            }
    
            public Person(string name)
            {
                this.Name = name;
            }
        }

    三、集合初始化

    namespace ConsoleTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                // C# 3.0之前初始化集合使用的代码
                List<string> names = new List<string>();
                names.Add("learning hard1");
                names.Add("learning hard2");
                names.Add("learning hard3");
    
                // 有了C# 3.0中集合初始化特性之后,就可以简化代码
                // 同时下面也使用了隐式类型(使用了var关键字)
                var newnames = new List<string>
                {
                    "learning hard1","learning hard2", "learning hard3"
                };
            }
        }
    
        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; }
    
            public Person()
            {
            }
    
            public Person(string name)
            {
                this.Name = name;
            }
        }
    }

    四、匿名类型

        class Program
        {
            static void Main(string[] args)
            {
                // 定义匿名类型
                // 因为这里不知道初始化的类型是什么,所以这里就必须使用隐式类型
                // 此时隐式类型就发挥出了功不可没的作用,从而说明隐式类型的提出是为了服务于匿名类型的
                // 而匿名类型的提出又是服务于Linq,一步步都是在微软团队的计划当中
                Console.WriteLine("进入匿名类型使用演示:");
                var person1 = new { Name = "learning hard", Age = 25 };
                Console.WriteLine("{0} 年龄为: {1}", person1.Name, person1.Age);
    
                // 定义匿名类型数组
                var personcollection = new[]
                {
                    new {Name ="Tom",Age=30},
                    new {Name ="Lily", Age=22},
                    new {Name ="Jerry",Age =32},
    
                    // 如果加入下面一句就会出现编译时错误
                    // 因为此时编译器就不能推断出要转换为什么类型
                    // new {Name ="learning hard"}
                };
    
                int totalAge = 0;
                foreach (var person in personcollection)
                {
                    // 下面代码证明Age属性是强类型的int类型
                    totalAge += person.Age;
                }
            }
        }
  • 相关阅读:
    单词方阵【DFS】
    关于vs扩展下载慢的问题。(更改一下,补充)
    归并排序的应用
    用qt做了个简易音乐播放器(零基础真的是太难了)
    实操理解微软所说的“物理文件位置”和“逻辑文件位置”的区别
    获取指定数量的容器的各自的所有元素,并可对容器分页
    [备忘]silverlight中关于“复制到输出目录”和“生成操作”
    [备忘]silverlight中播放视频路径问题
    与并行相关的常见概念
    巧用vs的PostBuildEvent
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/10950135.html
Copyright © 2011-2022 走看看