2009-04-20 179 views
1

我最近看到的是看起來像這樣一個C#構造函數...C#構造函數

public Class foo 
{ 
    public foo() : this(new bar()) 
    {} 
} 

任何人可以幫我解讀? bar()適合在哪裏?
如果你可以通過在適當位置插入bar()來幫助我完成課程,以便我可以編譯/調試並查看整個圖片。

在此先感謝。

尼科斯

回答

7

Foo類應包含另一個構造,採用一個酒吧對象作爲參數。

public class foo 
{ 
    public foo() 
     : this(new bar()) 
    { } 
    public foo(bar b) 
    { 
    } 
} 
public class bar 
{ 
} 
1

會有階級富第二構造函數簽名這樣

public foo(bar Bar) 
{ 
    ... do something with bar here; 
} 
1

這是一種常見的技術,以確保所有建設者經過一個單點,所以你只需要改變這一點(也可能有其他用途,但我不知道他們的)。

我已經看到了它在使用默認參數,如事情:

class Rational { 
    private: 
     long numerator; 
     long denominator; 
    public: 
     void Rational (long n, long d) { 
      numerator = n; 
      denominator = d; 
     } 
     void Rational (long n): Rational (n,1) {} 
     void Rational (void): Rational (0,1) {} 
     void Rational (String s): Rational (atoi(s),1) {} 
} 

熊的語法,我沒有一個編譯器隨時進入這裏,但基本意圖是集中儘可能多代碼儘可能在第一個構造函數中。

所以,如果,例如,您可以添加一個檢查,以確保分母大於零或者分子和分母使用的是最大公約數的方法降低,它只有有在代碼中的一個點發生。

+0

有趣。將代碼放入空括號中會發生什麼情況? – Svante 2009-04-20 11:12:32