c#3.0系列:Object Initializer 和 Collection Initializer
生活随笔
收集整理的這篇文章主要介紹了
c#3.0系列:Object Initializer 和 Collection Initializer
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對象初始化器(Object Initializers) 和 集合初始化器(Collection Initializers) ,就是簡化我們的代碼,讓本來幾行才能寫完的代碼一行寫完。這樣在LINQ的使用中,我們才不會把一個LINQ表達式寫的復雜。
Object Initializers
?Object Initializer的使用很簡單:在通過new 關鍵字創建對象的時候,將所需的Proeprty置于Type name后的{}中。比如:
?1class?staff
?2????{
?3????????public?string?Name?{?get;?set;?}
?4????????public?int??Age{get;?set;}
?5????????public?string?Add;???????
?6?????????public?staff()
?7????????{?}
?8????????public?staff(int?i,?string?s)
?9????????{
10????????????Name?=?s;
11????????????Age?=?i;
12????????}
13????} ?使用對象初始化器
1Console.WriteLine("Initializer");
2????????????staff?s1?=?new?staff(12,?"sss")?{?Name?=?"GUOJUN"?};
3????????????staff?s3?=?new?staff(12,?"sss")?{?Name?=?"GUOJUN",?Age?=?27,Add="HuBei"?};
4????????????staff?s2?=?new?staff?{?Name?=?"IORI",?Age?=?27?}; 在上面的例子中,我們通過一句代碼(staff s1 = new staff(12, "sss") { Name = "GUOJUN" };)實現對staff 對象的創建和初始化。
注意:
在使用對象初始化器時,隱式的調用了默認的構造函數(例如S2的創建及初始化)。
在使用對象初始化器時,也可以指定調用任何自定義的構造函數。(例如S1,S3的創建及初始化)。
可以一次為多個(不一定要全部)屬性賦值,
1staff?s1?=?new?staff(12,?"sss")?{?Name?=?"GUOJUN"?};
2staff?s3?=?new?staff(12,?"sss")?{?Name?=?"GUOJUN",?Age?=?27,Add="HuBei"?}; ?C# 3.x這些Feature僅僅是基于一種Programming Language層面的新特性而已,這些特性通過Programming Language對應的Compiler在編譯過程添加一些輔助的Code來實現。 通過編譯我們看看變成什么樣子:
?1public?static?void?fnInitializer()
?2{
?3????Console.WriteLine("Initializer");
?4????staff?<>g__initLocal3?=?new?staff(12,?"sss");
?5????<>g__initLocal3.Name?=?"GUOJUN";
?6????staff?s1?=?<>g__initLocal3;
?7????staff?<>g__initLocal4?=?new?staff(12,?"sss");
?8????<>g__initLocal4.Name?=?"GUOJUN";
?9????<>g__initLocal4.Age?=?0x1b;
10????<>g__initLocal4.Add?=?"HuBei";
11????staff?s3?=?<>g__initLocal4;
12????staff?<>g__initLocal5?=?new?staff();
13????<>g__initLocal5.Name?=?"IORI";
14????<>g__initLocal5.Age?=?0x1b;
15????staff?s2?=?<>g__initLocal5;
16????Console.WriteLine(s1.Name);
17????Console.WriteLine(s1.Age);
18????Console.WriteLine(s2.Name);
19} 我想上面的代碼就不用我太多的說明,大家一定明白。我只說明一點:? 調用對應Class的對應的Constructor創建一個臨時對象。
?2????????????{
?3????????????????new?staff?{Name?=?"GUOJUN",?Age?=?27?},
?4????????????????new?staff?{Name?=?"IORI",?Age?=?27?},
?5????????????????new?staff(12,?"sss")?{?Name?=?"GUOJUN"?}
?6????????????};
?7????????????foreach?(staff?pt?in?myListOfstaff)
?8????????????{
?9????????????Console.WriteLine(pt);
10????????????} ?分析Object Initializer的本質一樣,我們之后看看通過Compiler變異后的Code是什么樣子,就會對Collection Initializer的實現有一個全面的了解:
?1????List<staff>?<>g__initLocal6?=?new?List<staff>();
?2????staff?<>g__initLocal7?=?new?staff();
?3????<>g__initLocal7.Name?=?"GUOJUN";
?4????<>g__initLocal7.Age?=?0x1b;
?5????<>g__initLocal6.Add(<>g__initLocal7);
?6????staff?<>g__initLocal8?=?new?staff();
?7????<>g__initLocal8.Name?=?"IORI";
?8????<>g__initLocal8.Age?=?0x1b;
?9????<>g__initLocal6.Add(<>g__initLocal8);
10????staff?<>g__initLocal9?=?new?staff(12,?"sss");
11????<>g__initLocal9.Name?=?"GUOJUN";
12????<>g__initLocal6.Add(<>g__initLocal9);
13????List<staff>?myListOfstaff?=?<>g__initLocal6;
14????foreach?(staff?pt?in?myListOfstaff)
15????{
16????????Console.WriteLine(pt);
17????}
18 ?Collection Initializer的實現和Object Initializer很類似。
Object Initializers
?Object Initializer的使用很簡單:在通過new 關鍵字創建對象的時候,將所需的Proeprty置于Type name后的{}中。比如:
?1class?staff
?2????{
?3????????public?string?Name?{?get;?set;?}
?4????????public?int??Age{get;?set;}
?5????????public?string?Add;???????
?6?????????public?staff()
?7????????{?}
?8????????public?staff(int?i,?string?s)
?9????????{
10????????????Name?=?s;
11????????????Age?=?i;
12????????}
13????} ?使用對象初始化器
1Console.WriteLine("Initializer");
2????????????staff?s1?=?new?staff(12,?"sss")?{?Name?=?"GUOJUN"?};
3????????????staff?s3?=?new?staff(12,?"sss")?{?Name?=?"GUOJUN",?Age?=?27,Add="HuBei"?};
4????????????staff?s2?=?new?staff?{?Name?=?"IORI",?Age?=?27?}; 在上面的例子中,我們通過一句代碼(staff s1 = new staff(12, "sss") { Name = "GUOJUN" };)實現對staff 對象的創建和初始化。
注意:
在使用對象初始化器時,隱式的調用了默認的構造函數(例如S2的創建及初始化)。
在使用對象初始化器時,也可以指定調用任何自定義的構造函數。(例如S1,S3的創建及初始化)。
可以一次為多個(不一定要全部)屬性賦值,
1staff?s1?=?new?staff(12,?"sss")?{?Name?=?"GUOJUN"?};
2staff?s3?=?new?staff(12,?"sss")?{?Name?=?"GUOJUN",?Age?=?27,Add="HuBei"?}; ?C# 3.x這些Feature僅僅是基于一種Programming Language層面的新特性而已,這些特性通過Programming Language對應的Compiler在編譯過程添加一些輔助的Code來實現。 通過編譯我們看看變成什么樣子:
?1public?static?void?fnInitializer()
?2{
?3????Console.WriteLine("Initializer");
?4????staff?<>g__initLocal3?=?new?staff(12,?"sss");
?5????<>g__initLocal3.Name?=?"GUOJUN";
?6????staff?s1?=?<>g__initLocal3;
?7????staff?<>g__initLocal4?=?new?staff(12,?"sss");
?8????<>g__initLocal4.Name?=?"GUOJUN";
?9????<>g__initLocal4.Age?=?0x1b;
10????<>g__initLocal4.Add?=?"HuBei";
11????staff?s3?=?<>g__initLocal4;
12????staff?<>g__initLocal5?=?new?staff();
13????<>g__initLocal5.Name?=?"IORI";
14????<>g__initLocal5.Age?=?0x1b;
15????staff?s2?=?<>g__initLocal5;
16????Console.WriteLine(s1.Name);
17????Console.WriteLine(s1.Age);
18????Console.WriteLine(s2.Name);
19} 我想上面的代碼就不用我太多的說明,大家一定明白。我只說明一點:? 調用對應Class的對應的Constructor創建一個臨時對象。
?Collection Initializer?
?使用集合初始化器,如下:
?2????????????{
?3????????????????new?staff?{Name?=?"GUOJUN",?Age?=?27?},
?4????????????????new?staff?{Name?=?"IORI",?Age?=?27?},
?5????????????????new?staff(12,?"sss")?{?Name?=?"GUOJUN"?}
?6????????????};
?7????????????foreach?(staff?pt?in?myListOfstaff)
?8????????????{
?9????????????Console.WriteLine(pt);
10????????????} ?分析Object Initializer的本質一樣,我們之后看看通過Compiler變異后的Code是什么樣子,就會對Collection Initializer的實現有一個全面的了解:
?1????List<staff>?<>g__initLocal6?=?new?List<staff>();
?2????staff?<>g__initLocal7?=?new?staff();
?3????<>g__initLocal7.Name?=?"GUOJUN";
?4????<>g__initLocal7.Age?=?0x1b;
?5????<>g__initLocal6.Add(<>g__initLocal7);
?6????staff?<>g__initLocal8?=?new?staff();
?7????<>g__initLocal8.Name?=?"IORI";
?8????<>g__initLocal8.Age?=?0x1b;
?9????<>g__initLocal6.Add(<>g__initLocal8);
10????staff?<>g__initLocal9?=?new?staff(12,?"sss");
11????<>g__initLocal9.Name?=?"GUOJUN";
12????<>g__initLocal6.Add(<>g__initLocal9);
13????List<staff>?myListOfstaff?=?<>g__initLocal6;
14????foreach?(staff?pt?in?myListOfstaff)
15????{
16????????Console.WriteLine(pt);
17????}
18 ?Collection Initializer的實現和Object Initializer很類似。
轉載于:https://www.cnblogs.com/gjcn/archive/2008/04/15/1154071.html
總結
以上是生活随笔為你收集整理的c#3.0系列:Object Initializer 和 Collection Initializer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate中的inverse属性
- 下一篇: Remoting系列专题---构建Rem