C# 自动初始化器

[ C# 3.0/.NET 3.x 新增特性 ]

4.1 属性初始化器

  (1)在开发中,我们经常会这些为new出来的对象设置属性:

        static void InitialPropertyFunc()
        {
            Person p = new Person() { Name = "小强", Age = 18 };
            Console.WriteLine("Name:{0}-Age:{1}", p.Name, p.Age);
        }    

 

  (2)但是,经过编译后我们发现原来还是以前的方式:先new出来,然后一个属性一个属性地赋值。这里,编译器首先生成了一个临时对象g_initLocal0,然后为其属性赋值,最后将g_initLocal0这个对象的地址传给要使用的对象p。

4.2 集合初始化器

  (1)在开发中,我们经常在一个集合的实例化中,就为其初始化:

        static void InitialCollectionFunc()
        {
            List<Person> personList = new List<Person>()
            {
                new Person(){Name="小强",Age=10},
                new Person(){Name="小王",Age=15},
                new Person(){Name="小李",Age=18}
            };

            foreach(Person person in personList)
            {
                Console.WriteLine("Name:{0}-Age:{1}", 
                    person.Name, person.Age);
            }
        }

  (2)经过上面的集合初始化器我们了解到编译器还是会编译成原来的方式,即先new出来,为其分配了内存空间之后,再一个一个地为其属性赋值。那么,在集合的初始化中我们也可以大胆地猜测,编译器也是做了以上的优化工作:即先将每个对象new出来,然后一个一个地为属性赋值,最后调用集合的Add方法将其添加到集合中。于是,我们还是反编译一下,一探究竟:

 

 

 出处:http://edisonchou.cnblogs.com

posted @ 2020-05-29 11:26  delafqm  阅读(331)  评论(0编辑  收藏  举报