C# 3.0语言新特性(二)

来源:互联网 发布:阿里云ces 免登 编辑:程序博客网 时间:2024/05/22 13:54

1对象与集合初始化器

例子:

#region Object and Collections Initializers starts

        public class Point

        {

            private int x, y;

 

            public int X

            {

                get

                {

                    return x;

                }

                set

                {

                    x = value;

                }

            }

 

            public int Y

            {

                get

                {

                    return y;

                }

                set

                {

                    y = value;

                 }

            }

        }

 

        public class Rectangle

        {

            Point p1 = new Point();

            Point p2 = new Point();

 

            private List<string> lisPhoneNumbers = new List<string>();

 

            public Point P1

            {

                get

                {

                    return p1;

                }

            }

 

            public Point P2

            {

                get

                {

                    return p2;

                }

            }

 

            public List<string> PhoneNumbers

            {

                get

                {

                    return lisPhoneNumbers;

                }

            }

        }

 

        void ObjectInitializers()

        {

            var r = new Rectangle

            {

                P1 = { X = 0, Y = 1 },

                P2 = { X = 2, Y = 3 },

                PhoneNumbers = {"123", "321" }

            };

        }

        #endregion Object and Collections Initializers ends

 

当我们使用ObjectInitializers()方法时,

相当于

var r = new Rectangle();

r.P1 = new Point ();

r.P1.X = 0; r.P1.Y = 1;

r.P2 = new Point();

r.P2.X = 2; r.P2.Y = 3;

r.PhoneNumbers = new List<String>{"123", "321" };

 

要点:对象初始化器实际上利用了编译器对对象中对外可见的字段和属性进行按序赋值

集合初始化器会对初始化器中的元素进行按序调用ICollection<T>.Add(T).

该技术也是编译时技术

 

2 匿名方法

允许以下的声明:

var p1 = new {Name=”Lawnmower”,Price = 495.00};

var p2 = new {Name=”Shovel”,Price=26.95};

p1 = p2;

可以使用new关键字调用匿名初始化器创建一个匿名类型的对象。

匿名类型直接继承于system.Object

匿名类型的成员是编译器根据初始化器推断类的。

                      (待续)
原创粉丝点击