2

次のようなオブジェクトがある場合:

public class Foo
{
    private int _id;

    public int id
    {
        get { return _id; }
        set { _id = value; }
    }

    private string _name;

    public string name
    {
        get { return _name; }
        set { _name = value; }
    }
}

ID を -1 に初期化し、名前を String.Empty に初期化したい場合、ベスト プラクティスは何ですか? (なぜ)

やっている:

private int _id = -1

または

コンストラクターで _id = -1 および name = String.Empty を設定しますか?

4

7 に答える 7

7

これは何よりもスタイルの問題です。機能上の問題である場合はごくわずかです

  1. フィールドをすべて同じ値に初期化する多くのコンストラクターがある場合。その時点でコードが冗長になり、コンストラクターをリファクタリングするか、フィールド初期化子を使用する必要があります。
  2. 同じクラス階層内の別のフィールドの値に依存する場合は、フィールド初期化子を使用しないでください。部分クラスがない場合、結果は予測可能ですが、それでも人々をループに陥れる可能性があります..
于 2009-02-26T14:59:45.740 に答える
2

いつ設定するかによって異なります...

private int _id = -1

コンストラクターが呼び出される前に _id を初期化します。

于 2009-02-26T14:59:31.157 に答える
2

フィールド アプローチは簡潔で、多くの票を獲得しますが、(単純なプロパティの場合) 私の好みは自動プロパティを使用することです。その場合コンストラクターを使用する必要があります。

    public Foo() {
        Id = -1;
        Name = "";
    }
    public int Id {get;set;}
    public string Name {get;set;}

[DefaultValue(-1)]デザイナーやシリアライザーに役立つ etc の使用を検討することもできますが、これは自動実装プロパティ (または通常のプロパティ) の初期値には影響しません。追加情報のみです。

于 2009-02-26T15:00:16.210 に答える
0

それは主にスタイルの好みの問題です。オブジェクトがインスタンス化されるときに行われるすべてのデータと手順にとって適切な場所であるため、通常はコンストラクターでそれらを割り当てます。

于 2009-02-26T15:05:17.833 に答える
0

コンストラクターを使用するのではなく、「インライン」に設定すると、意図をよりよく示すように思えます。機能的には同じです。

于 2009-02-26T14:59:14.853 に答える
0

CLR ウィザードは私を修正するかもしれませんが、これら 2 つのアプローチは機能的には同じだと思いますが、コンストラクターで既定値を設定する方が明示的で明白ですが、少し面倒であるという議論をすることもできます。

于 2009-02-26T15:00:00.950 に答える
0

インライン初期化は C# コンパイラによってコンストラクターの先頭に追加されるため、実際には違いはありません。個人的には、デフォルトのコンストラクターであっても、常にコンストラクターを追加することを好みます。

于 2009-02-26T15:00:42.057 に答える