WEB开发网
开发学院软件开发C语言 C#3.0语言新特性之对象和集合初始化器 阅读

C#3.0语言新特性之对象和集合初始化器

 2009-03-11 08:19:23 来源:WEB开发网   
核心提示: 好了,现在我们就可以使用对象初始化语法,C#3.0语言新特性之对象和集合初始化器(5),创建一个Rectangle的实例并且将它内部的点设置如下:Rectangle myRect = new Rectangle { TopLeft = new Point { X = 100, Y = 10

好了,现在我们就可以使用对象初始化语法,创建一个Rectangle的实例并且将它内部的点设置如下:

Rectangle myRect = new Rectangle

    {

        TopLeft = new Point { X = 100, Y = 100 },

        BottomRight = new Point { X = 200, Y = 200 }

    };

这样设置是不是简单多了,从而也提高了可读性。这个时候,我们就能够体会到它相对于传统方法的好处了。

在最后,为了能够让读者更好地进行对比学习,我们再给出它的原始调用方法:

Rectangle myRect = new Rectangle();

   Point p1 = new Point();

   p1.X = 100;

   p1.Y = 100;

   myRect.TopLeft = p1;

   Point p2 = new Point();

   p2.X = 200;

   p2.Y = 200;

   myRect.BottomRight = p2;

20.4.4 集合初始化器

与对象初始化语法类似的是集合初始化。这个语法使得我们可以用简单的数组类型来初始化一个泛型容器(比如List<T>)。可以应用集合初始化器的对象的类型必须实现了System.Collections.Generic.ICollections<T>并指定了确定的T。此外,必须存在从每个元素初始化器的类型到T的隐式转换。如果这些条件不能满足,就会产生一个编译期错误。集合初始化器将依次对每个指定的元素调用ICollection<T>.Add(T)。在这个约束之下,System.Collection命名空间下的容器(比如ArrayList)就不能使用这种新语法,因为它们并没有实现所需的接口。

一个集合初始化器由一系列的元素初始化器构成,包围在{和}记号之间,并使用逗号进行分隔。每个元素初始化器指定一个元素,该元素将被添加到待初始化的集合对象中。为了避免与成员初始化器混淆,元素初始化器不能是赋值表达式。如下面的例子所示:

// 初始化一个普通数组

 int[] myIntArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

 // 初始化一个int型泛型List<>

 List<int> myGenericList = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

 // 下面这句是非法的,ArrayList没有实现ICollection<T>接口

 ArrayList myList = new ArrayList { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

现在我们把前面用到的Point类应用进来,比如:

static void Main()

 {

    List<Point> myPointList = new List<Point>

    {

        new Point {X = 10, Y = 20},

        new Point {X = 100, Y = 200},

        new Point {X = 1000, Y = 2000}

    };

    foreach (var p in myPointList)

    {

       Console.WriteLine(p);

    }

}

程序运行结果如下:

[10,20,Color=白色]

[100,200,Color=白色]

[1000,2000,Color=白色]

上一页  1 2 3 4 5 

Tags:语言 特性 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接