对象初始化器(Object Initializers)

定义如下类

 
  
public class MyClass
{
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 ;

使用默认构造函数时可以省略括号(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

应用范围:使用这种方式初始化的类必须实现了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

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Leogo/archive/2011/02/03/1949036.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值