亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#特性-對象集合初始化器介紹

2020-01-24 02:13:29
字體:
來源:轉載
供稿:網友

C# 3.0為你提供了對象集合初始化器:

/// <summary>/// 圖書類/// </summary>public class Book{  /// <summary>  /// 圖書名稱  /// </summary>  public string Title { get; set; }  /// <summary>  /// 單價  /// </summary>  public float Price { get; set; }  /// <summary>  /// 作者  /// </summary>  public string Author { get; set; }  /// <summary>  /// ISBN號  /// </summary>  public string ISBN { get; set; }}//對象初始化器Book book = new Book { Title="Inside COM",ISBN="123-456-789"};

現在你想初始化幾個就初始化幾個,不需要出現這種情況:

public Book():this(""){ }public Book(string title):this(title,0){}public Book(string title, float price):this(title,price,""){ }public Book(string title, float price, string isbn){    this.Title = title;    this.Price = price;    this.ISBN = isbn;}

這一串的構造方法都是為了應付不同的初始化情況。
好了,來看看對象初始化器編譯器在后面為我們做了些什么呢?
使用Reflector反編譯程序集:

復制代碼 代碼如下:

Book <>g__initLocal0 = new Book();
<>g__initLocal0.Title = "Inside COM";
<>g__initLocal0.ISBN = "123-456-789";
Book book = <>g__initLocal0;

C#編譯器生成了一個新的局部變量<>g__initLocal0,調用Book的默認無參構造方法初始化它,然后對它的屬性進行賦值,最后將這個局部變量賦值給book。看到這里,我們應該想到,要使用對象初始化器,那么這個對象必須有一個無參構造方法,如果你給這個方法寫了一個有參構造方法而將它的默認無參構造方法覆蓋了并且沒有提供一個新的無參構造方法,那么使用對象初始化器編譯的時候是不會通過的(不過想不通,為啥C#編譯器生成這么一個奇怪的局部變量名字,還有為啥不直接使用book呢)。像下面的代碼不更好:

復制代碼 代碼如下:

Book book = new Book();
book.Title = "Inside COM";
book.ISBN = "123-456-789";

后來我發現我是在debug模式下編譯的,換到release模式下變成了這樣:

復制代碼 代碼如下:

Book <>g__initLocal0 = new Book();
<>g__initLocal0.Title = "Inside COM";
<>g__initLocal0.ISBN = "123-456-789";

被優化了。上面介紹的就是對象初始化器了,那什么是集合初始化器呢?

復制代碼 代碼如下:

IList<Book> books = new List<Book>();
//這里就使用了對象初始化器,學以致用吧
books.Add(new Book { Title = "Inside COM", ISBN = "123-456-789",Price=20 });
books.Add(new Book { Title = "Inside C#", ISBN = "123-356-d89",Price=100 });
books.Add(new Book { Title = "Linq", ISBN = "123-d56-d89", Price = 120 });

這樣的代碼沒少寫吧,實際上也許比這更復雜,有了C# 3.0我們睡覺都想笑:

復制代碼 代碼如下:

IList<Book> books = new List<Book> {
     new Book { Title = "Inside COM", ISBN = "123-456-789",Price=20 },
     new Book { Title = "Inside C#", ISBN = "123-356-d89",Price=100 },
     new Book { Title = "Linq", ISBN = "123-d56-d89", Price = 120 }
};

還是像剛才一樣,我們來欣賞一下C#編譯器為我們生成的代碼:

復制代碼 代碼如下:

List<Book> <>g__initLocal0 = new List<Book>();
    Book <>g__initLocal1 = new Book();
    <>g__initLocal1.Title = "Inside COM";
    <>g__initLocal1.ISBN = "123-456-789";
    <>g__initLocal1.Price = 20f;
    <>g__initLocal0.Add(<>g__initLocal1);
    Book <>g__initLocal2 = new Book();
    <>g__initLocal2.Title = "Inside C#";
    <>g__initLocal2.ISBN = "123-356-d89";
    <>g__initLocal2.Price = 100f;
    <>g__initLocal0.Add(<>g__initLocal2);
    Book <>g__initLocal3 = new Book();
    <>g__initLocal3.Title = "Linq";
    <>g__initLocal3.ISBN = "123-d56-d89";
    <>g__initLocal3.Price = 120f;
    <>g__initLocal0.Add(<>g__initLocal3);

從上面的代碼來看,編譯器自動的調用了List的無參構造方法,然后實例化一個個的Book,再一個個的Add進去,和我們原來的做法沒有什么不同,但是,這是編譯器為我們做的,所以簡省了我們很多的編碼工作。
對象集合初始化器就算介紹完了。有人也許會說,不就是個syntx sugar么,有什么。是的,確實是個語法糖。在編譯器發展早期,編譯器科學家門一直在想方設法的優化編譯器生成的代碼,這個時候,編譯器做的主要是對機器優化,因為那個時候機器的時間非常寶貴,機器運算速度也不快,今天我們有了足夠好的機器了(但并不是說我們可以不關注性能的編寫程序),而且作為編寫軟件的人來說,比機器的時間寶貴得多,所以今天的編譯器也在向人優化了,從編程語言的發展之路來講,今天的編程語言比昨天的語言更高級,也更人性化了,我們只要編寫更少的代碼,更符合人的思維的代碼,而只要關注我們值的關注的地方。體力活兒就交給編譯器吧。

附加:

剛開始想想這對象集合初始化器也許就一雞肋,沒啥用,不就減少一點點代碼么,像這種簡單的初始化工作,大部分代碼生成器都可以來干。后來在研究匿名類型的時候突然發現,如果沒有這個對象初始化器,匿名類型是不是要復雜一些?或者就是難以實現?
var test = new{Key="test",Value="test"};如果沒有對象初始化器,匿名類型該怎么辦?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av日韩在线观看| 日韩欧美在线看| 久久久国产精品x99av| 88xx成人精品| 欧洲成人性视频| 国产69久久精品成人| 九九热精品视频| 国产精品视频精品| 国产精品久久久久久亚洲调教| 91在线直播亚洲| 日韩精品欧美国产精品忘忧草| 国产在线久久久| 久久五月天综合| 欧美在线播放视频| 国产亚洲福利一区| 日韩av男人的天堂| 欧美性xxxxhd| 中国china体内裑精亚洲片| 亚洲无限av看| 亚洲图片欧洲图片av| 精品亚洲一区二区三区在线观看| 久久精品成人一区二区三区| 久久久免费观看视频| 91国产美女视频| 国产精品久久久久久久久久久新郎| 国产精品欧美激情| 久久久噜噜噜久久久| 亚洲人成电影在线观看天堂色| 久久久久99精品久久久久| 欧美黄色片在线观看| 亚洲人成电影在线播放| 久久国产精品久久国产精品| 91日本在线观看| 97热在线精品视频在线观看| 最近免费中文字幕视频2019| 久久久欧美一区二区| 欧美日韩一区二区免费视频| 亚洲精品自在久久| 久久成人在线视频| 日韩欧美在线播放| 欧美黄网免费在线观看| 亚洲国产第一页| 精品亚洲va在线va天堂资源站| 精品久久久视频| 在线视频免费一区二区| 日韩精品一区二区三区第95| 亚洲欧美制服丝袜| 精品国产乱码久久久久久婷婷| 538国产精品视频一区二区| 亚洲天堂男人的天堂| 国产婷婷97碰碰久久人人蜜臀| 一本大道香蕉久在线播放29| 91av在线看| 91久久久久久久一区二区| 亚洲成人性视频| 91在线观看免费观看| 日本精品久久久久久久| 国产+成+人+亚洲欧洲| 国产精品精品视频| 色哟哟入口国产精品| 狠狠色香婷婷久久亚洲精品| 色妞一区二区三区| 成人美女av在线直播| 韩国美女主播一区| 68精品国产免费久久久久久婷婷| 欧美第一黄网免费网站| 日韩美女在线播放| 国产精品国产三级国产aⅴ浪潮| 成人av.网址在线网站| 国产精品久久久久久五月尺| 欧美一区亚洲一区| 色综合久综合久久综合久鬼88| 91香蕉嫩草神马影院在线观看| 国产精品成人在线| 亚洲欧美日韩一区二区三区在线| 性欧美长视频免费观看不卡| 日韩精品免费在线视频观看| 国产精品综合网站| 蜜月aⅴ免费一区二区三区| 国自在线精品视频| 国外成人在线直播| 欧美极品少妇xxxxx| 日韩中文在线视频| 欧美在线亚洲在线| 欧美电影免费观看| 中文字幕国产亚洲2019| 在线播放日韩精品| 中文字幕日韩精品在线| 欧美激情成人在线视频| 91精品国产91久久久久久最新| 欧美激情国产精品| 91精品在线一区| 九九久久综合网站| 国内揄拍国内精品| 日韩中文有码在线视频| 国产精品揄拍一区二区| 国产欧美在线看| 亚洲网址你懂得| 91wwwcom在线观看| 欧美日韩国产va另类| 欧美精品久久久久a| 18性欧美xxxⅹ性满足| 国产成人福利夜色影视| 成人免费淫片aa视频免费| 久热99视频在线观看| 国产精品视频99| 色婷婷综合久久久久| 青青a在线精品免费观看| 欧美日韩在线另类| 日韩激情视频在线播放| 国产精彩精品视频| 97精品伊人久久久大香线蕉| 国产亚洲免费的视频看| 成人疯狂猛交xxx| 亚洲a∨日韩av高清在线观看| 欧美激情精品在线| 伊人伊人伊人久久| 国产精品久久久久久久久久久久久久| 欧洲中文字幕国产精品| 97视频在线看| 久久九九热免费视频| 久久久久久噜噜噜久久久精品| 久久国产一区二区三区| 成人97在线观看视频| 成人一区二区电影| 国内精品视频一区| 美日韩精品免费视频| 亚洲欧美日韩中文视频| 日韩有码在线播放| 77777亚洲午夜久久多人| 中日韩午夜理伦电影免费| 精品久久国产精品| 欧美成人精品h版在线观看| 欧洲成人午夜免费大片| 亚洲欧洲偷拍精品| 国产精品久久久久久超碰| 日韩中文字幕精品| 日韩精品中文字| 欧美日韩亚洲成人| 91wwwcom在线观看| 日韩电影中文字幕在线| 日韩精品在线免费观看| 欧美性高潮床叫视频| 91精品国产高清自在线| 国产做受高潮69| 日本三级久久久| 色诱女教师一区二区三区| 国产精品成人在线| 成人免费网站在线看| 欧美乱大交xxxxx另类电影| 亚洲国产欧美一区二区三区久久| 中文字幕欧美亚洲| 丝袜亚洲另类欧美重口| 日韩精品久久久久久福利| 一区二区三区天堂av| 欧美又大又粗又长| 精品国产视频在线| 欧美日韩中文字幕| 久久久国产一区二区三区| 亚洲国产精品一区二区三区| 亚洲国产成人在线播放| 日韩理论片久久| 日韩精品极品视频免费观看| 欧美大尺度激情区在线播放|