一、 引言
c# 3.0中新的物件初始化器是一種簡單的語法特徵-借助於這種特徵,物件的構建和初始化變得非常簡單。假定你有乙個類student,它看起來有如下樣子:
public class student
那麼,你可以使用物件初始化器來建立這個類的乙個物件,如下所示:
var student1 = new student;
c# 3.0中新的集合初始化器語法也具有類似操作特徵。例如,實現system.collections.generic.icollection<t>的任何物件都可以使用乙個集合初始化器來初始化它的值。
乙個集合初始化器由下列部分組成:
· 乙個物件初始化器序列,用""符號包括,並且由逗號隔開。
· 元素初始化器,它們中每乙個都指定乙個元素以被新增到指定的集合物件中(元素初始化器不能是乙個集合初始化器中的賦值表示式)。
那麼,究竟它是如何工作的呢?乙個集合初始化器必須遵循下列規則:
· 應用集合初始化器的每乙個集合物件必須是一種實現了system.collections.generic.icollection<t>的型別(恰好針對乙個t)。
· 必須存在從每乙個元素初始化器到t型別的一種隱式轉換。乙個集合初始化器針對每乙個指定的元素都會按序呼叫icollection<t>.add(t)方法。
作為乙個例子,下面的集合初始化器建立並初始化乙個新的字串集合-這個集合具有3個成員:"alice","bob"和"chris",參考如下:
list<string> names = new list<string> ;
注意:所有的初始值都是字串型別。否則,你將得到乙個編譯器錯誤。
二、 實現集合初始化
假定你想描述乙個班及其中的註冊同學。為此,你可以通過使用c# 3.0中的集合初始化器程式設計實現,如下所示:
using system;
using system.collections.generic;
using system.text;
using system.query;
using system.xml.xlinq;
using system.data.dlinq;
namespace collectioninitializer
static void main(string args)
},new myclass}};
}}}如果你沒有vs 2005但是安裝了linq preview,那麼你可以使用下列命令來從命令列編譯該**:
c:\program files\linq preview\bin\csc.exe
/reference:"c:\program files\linq preview\bin\system.data.dlinq.dll"
/reference:c:\windows\microsoft.net\framework\v2.0.50727\system.data.dll
/reference:c:\windows\microsoft.net\framework\v2.0.50727\system.dll
/reference:"c:\program files\linq preview\bin\system.query.dll"
/reference:c:\windows\microsoft.net\framework\v2.0.50727\system.xml.dll
/reference:"c:\program files\linq preview\bin\system.xml.xlinq.dll" program.cs
三、 **剖析
讓我們更細緻地分析一下前面的c# 3.0**:
var classes = new list<myclass>
},new myclass}};
對於編譯器來說,它具有與下面**相同的效果:
var classes = new list<myclass>();
var __c1 = new myclass ();
__c1.nameofclass = "science";
__c1.studentnames.add("laura");
__c1.studentnames.add("george");
classes.add(__c1);
var __c2 = new myclass();
__c2.nameofclass = "commerce";
__c2.studentnames.add("bill");
__c2.studentnames.add("hillary");
classes.add(__c2);
如果啟用ildasm並且開啟了編譯的二進位制**形式,那麼你能夠看到如圖1類似的內容。
圖1.示例**片斷的編譯的二進位制形式
如果你雙擊在ildasm中的main結點,那麼你會看到下列**:
.method private hidebysig static void main(string args) cil managed
//program::main方法結束
四、 小結
從前面的一些**片斷中你可以看到,c# 3.0在語法方面邁出了很大的一步。
集合初始化器,作為c# 3.0新引入的特徵之一,提供了一種新的語法來初始化集合物件。這種簡單的語法把集合物件的建立和初始化結合到乙個步驟中。
C 3 0新特徵之建立和初始化集合物件
一 引言 c 3.0中新的物件初始化器是一種簡單的語法特徵 借助於這種特徵,物件的構建和初始化變得非常簡單。假定你有乙個類student,它看起來有如下樣子 public class student 那麼,你可以使用物件初始化器來建立這個類的乙個物件,如下所示 var student1 new st...
C 3 0新特徵之建立和初始化集合物件
一 引言 c 3.0中新的物件初始化器是一種簡單的語法特徵 借助於這種特徵,物件的構建和初始化變得非常簡單。假定你有乙個類student,它看起來有如下樣子 public class student 那麼,你可以使用物件初始化器來建立這個類的乙個物件,如下所示 var student1 new st...
C 3 0之物件與集合初始化
我們知道在c 2.0中要初始化乙個物件可以用構造器,或者宣告公有屬性,然後在new乙個物件之後在對屬性賦值。必須一步一步的來,在c 3.0中可以有一種很簡單的方法對物件和集合進行初始化工作。看個例子 list int num newlist int 相當於 icollection.add t 即nu...