定义如下类
public
class
MyClass
{
public int X;
public int Y;
public MyClass()
{
}
public MyClass( int a, int b)
{
X = a;
Y = b;
}
}
{
public int X;
public int Y;
public MyClass()
{
}
public MyClass( int a, int b)
{
X = a;
Y = b;
}
}
对象初始化器Object Initializers
创建对象的时候可以使用如下语法:
MyClass mc
=
new
MyClass() { X
=
100
, Y
=
200
};
效果等同于
MyClass mc
=
new
MyClass();
mc.X = 100 ;
mc.Y = 200 ;
mc.X = 100 ;
mc.Y = 200 ;
使用默认构造函数时可以省略括号(resharper也建议省略括号)
MyClass mc
=
new
MyClass { X
=
100
, Y
=
200
};
如果使用带参数的构造器,初始化参数将被覆盖,比如下面的代码,最终x,y的值分别为100,200
MyClass mc
=
new
MyClass(
1
,
2
) { X
=
100
, Y
=
200
};
Initializing Inner Types
略,参考相关资料
集合初始化器(Collection Initializers):
可以使用类似初始化数组的语法初始化集合类, {}内的内容添加为集合成员,和数组初始化不一样的是必须显式调用构造函数
ArrayList al
=
new
ArrayList(){
1
,
2
,
3
,
4
}; //ok
ArrayList al = new ArrayList{ 1 , 2 , 3 , 4 }; //ok
ArrayList al = { 1 , 2 , 3 , 4 }; // compile failed
ArrayList al = new ArrayList{ 1 , 2 , 3 , 4 }; //ok
ArrayList al = { 1 , 2 , 3 , 4 }; // compile failed
应用范围:使用这种方式初始化的类必须实现了IEnumerable接口,同时必须定义了名为Add的方法,并且Add方法的形参列表必须与初始化时的实参一致。
public
class
SomeClass : IEnumerable
{
public void Add( int i)
{
Console.WriteLine( " add value {0} " , i);
}
public void Add( int i, string s)
{
Console.WriteLine( " add value {0}, {1} " , i, s);
}
public IEnumerator GetEnumerator()
{
return null ; // 不影响初始化
}
}
SomeClass a = new SomeClass { 1 , 2 , 3 }; // ok
SomeClass b = new SomeClass { { 1 , " aa " }, { 2 , " bb " }, { 3 , " cc " } }; // ok , 初始化Dictionary使用类似的语法
SomeClass c = new SomeClass { " aa " , " bb " , " cc " }; // compile failed
{
public void Add( int i)
{
Console.WriteLine( " add value {0} " , i);
}
public void Add( int i, string s)
{
Console.WriteLine( " add value {0}, {1} " , i, s);
}
public IEnumerator GetEnumerator()
{
return null ; // 不影响初始化
}
}
SomeClass a = new SomeClass { 1 , 2 , 3 }; // ok
SomeClass b = new SomeClass { { 1 , " aa " }, { 2 , " bb " }, { 3 , " cc " } }; // ok , 初始化Dictionary使用类似的语法
SomeClass c = new SomeClass { " aa " , " bb " , " cc " }; // compile failed