2009-04-20 7 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

fooというクラスがパラメータとしてバーオブジェクトを受け取り、別のコンストラクタを、含まれている必要があります。この

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

+0

それは依然として実行されますが、依存関係(主コンストラクタ)の後に実行されます。 – paxdiablo