熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

了解C#特性:對象集合初始化器[1]

2013-11-13 10:56:59  來源: .NET編程 

  在寫一些實體類的時候我們往往在寫構造方法的時候思考很長時間除了一個無參構造器外還在想需要寫幾個構造器呢?哪些參數是需要初始化的現在你再也不需要為這事煩惱了C# 為你提供了對象集合初始化器:

///
///圖書類
///
publicclassBook
{
  ///
  ///圖書名稱
  ///
  publicstringTitle{get;set;}
  ///
  ///單價
  ///
  publicfloatPrice{get;set;}
  ///
  ///作者
  ///
  publicstringAuthor{get;set;}
  ///
  ///ISBN號
  ///
  publicstringISBN{get;set;}
}
//對象初始化器
Bookbook=newBook{Title=InsideCOMISBN=};

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

public Book():this()
{
}
public Book(string title):this(title)
{
}
public Book(string title float price):this(titleprice)
{
}
public Book(string title float price string isbn)
{
    thisTitle = title;
    thisPrice = price;
    thisISBN = isbn;
}

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

Book<>g__initLocal=newBook();
<>g__initLocalTitle=InsideCOM;
<>g__initLocalISBN=;
Bookbook=<>g__initLocal;

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

Bookbook=newBook();
bookTitle=InsideCOM;
bookISBN=;

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/14838.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.