3

だから、私は最近C#を学んでいますが、私が理解できない、または答えを見つけることができないことが1つあります。

このことを考慮:

class Class1 {
    int myInt = 32;
}

この:

class Class1 {
    int myInt;

    public Class1(){
        myInt = 32;
    }
}

値の割り当てまたはインスタンス化のために、あるメソッドを他のメソッドよりも優先して使用する必要がある場合とその理由を知りたいだけです。

4

3 に答える 3

11

最初に、初期化で明示的または暗黙的に「this」への参照が必要な場合は、ctor で初期化する必要があります

class C
{
    int x = MakeX();  
    int MakeX() { whatever } 
}

呼び出しは暗黙的に行われ、まだ ctor を実行していないため、これはthis.MakeX()違法ですthis これは合法です:

class C
{
    int x;
    int MakeX() { whatever }
    public C() { this.x = this.MakeX(); } 
}

this 明らかに、 ctor 本体自体での使用を制限できないためです。

また、フィールド初期化子は、最も派生したものから最も派生していないものの順に実行され、最初に実行されることに注意してください。基本クラスのコンストラクターは、派生の少ないものから派生の多いものの順に実行され、 2 番目に実行されます。それが問題になることはめったにありませんが、とにかく知っておくと役に立ちます。

一般的に、アドバイスは「一貫性を保つ」ことです。一部のフィールドは初期化子で初期化し、一部は ctor 本体のステートメントで初期化しないでください。1 つを選択し、一貫して実行します。

于 2012-04-17T00:34:27.223 に答える
4

それはあなたの会社の好みやコーディング基準の問題です。

私の経験則では、すべてのコンストラクターが変数に同じ値を代入する場合、最初の形式を使用します。値が外部から取得される場合、または別のコンストラクターが別の値を変数に割り当てる場合、2 番目の形式を使用します。

于 2012-04-17T00:25:37.127 に答える
2

業界で働いている場合、それは主に個人の好みやプロジェクトのコーディング規則次第です。つまり、メンバー変数を初期化する「正しい」または「間違った」方法はありません。最終的に重要なのは、やり方に一貫性を持たせることです。

于 2012-04-17T00:25:54.293 に答える