这种语法称为对象初始化。C#规范明确给出了有关此主题的许多示例:
7.6.10.2对象初始化器对象初始化器由一系列成员初始化器组成,这些序列由{和}标记括起来,并用逗号分隔。每个成员初始值设定项都必须命名正在初始化的对象的可访问字段或属性,后跟等号和表达式或对象初始值设定项或集合初始值设定项。对象初始化程序为同一字段或属性包含多个成员初始化程序是错误的。对象初始化程序不可能引用正在初始化的新创建的对象。
例如:
Rectangle r = new Rectangle { P1 = { X = 0, Y = 1 }, P2 = { X = 2, Y = 3 } };
编译为:
Rectangle r = new Rectangle();r.P1.X = 0;r.P1.Y = 1;r.P2.X = 2;r.P2.Y = 3;
具有:
public class Rectangle{ public Rectangle() { P1 = new Point(); //default Point for demo purpose P2 = new Point(); //default Point for demo purpose } public Point P1 { get; set; } public Point P2 { get; set; }}
和
public class Point{ public int X { get; set; } public int Y { get; set; }}
也可以考虑读一本伟大的篇章 8.3简化初始化 在 C#中深度 的书。Jon Skeet再次介绍了使用这种语法初始化树状结构的优点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)