2011-09-22 166 views
0

我不能讀這行代碼幫助我瞭解C#這個代碼

public Wine (decimal price, int year) : this (price) { Year = year; } 

什麼:this關鍵字在構造函數中做

public class Wine 
{ 
    public decimal Price; 
    public int Year; 

    public Wine (decimal price) 
    { 
     Price = price; 
    } 

    public Wine (decimal price, int year) : this (price) 
    { 
     Year = year; 
    } 
} 
+0

[這是什麼冒號(:)是什麼意思?](http://stackoverflow.com/questions/1071148/what-does-this-colon-mean) – cHao

回答

5

這被稱爲構造函數鏈。不用重寫單參數構造函數的代碼,只需調用它即可。 C#通過在冒號中使用這個簡短的符號來簡化這一點。

0

它要求與單小數參數價格的構造第一。

3

this(price)調用另一個構造函數,在這種情況下只接受一個十進制參數。作爲參考閱讀"Using Constructors"

我不是這個特殊例子的忠實粉絲,因爲這兩個構造函數都在做初始化工作。

在我看來,最好是通過默認值一個構造函數,然後做所有工作 - 是不會傳播的不同構造之間的這種方式初始化和你有一個單點的一切是初始化 - 一個更好的方式是是:

public class Wine 
{ 
    public decimal Price; 
    public int Year; 
    public Wine (decimal price): this(price, 0) 
    public Wine (decimal price, int year) 
    { 
     Price = price; 
     Year = year; 
    } 
} 
0

它在同一個類中調用另一個構造函數,該構造函數具有將該值提供給初始構造函數調用的值。在你的例子中,Wine類有(至少)兩個構造函數,一個需要decimal(價格)和int(年),另一個只需要decimal(價格)。

當您調用接受這兩個參數的調用者時,它會調用只有一個參數將價格值傳遞給第二個參數的參數。然後它執行構造函數體(設置Year to year)。

這允許您重複使用無論構造函數調用發生的常見邏輯(在這種情況下,設置價格應始終發生,但更具體的構造函數也設置年)。