2017-09-01 18 views
0

これを書く方法はありますか?私は明示的にフィールド_Dを宣言する必要はありませんか?c#クラス宣言のプロパティ

  • クラスが実装されているとき、どうすれば= new List<T>()を回避できますか?

私が持っているもの:私が欲しいもの

class c { 
    private List<T> _D = new List<T>(); 
    public List<T> D { get { return _D; } set { _D = value; } } 
} 

class c { 
    public List<T> D { get; set; } 
} 

それが財産List<T>を割り当てるには、コンストラクタを宣言するほうがよいのではないでしょうか?次のように:

class c { 
    c() { D = new List<t>(); } 
    public List<t> D { get; set; } 
} 

プロパティを実装して初期値を割り当てるとき、今日のベストプラクティスは何ですか?

3つはすべて技術的に正しいです。私が引き継ぐ少しのコードで最初のものを見つけました。私はすべてのプロパティのバッキングフィールドを宣言する元のコードの背後にある目的を見つけることができません。私は背中のフィールドを宣言することはベストプラクティスではないと思ったのですが、ここでは起こっていないクラスのメソッドのどこかでプライベートフィールドを実際に使用する場合を除いて、C#v3 ..

最初のList<>をプロパティに「クラスのどこかのプロパティを使用する」と指定して見てください。 それを「無意味なもの、それは私の3番目の例のようにしてください」と見ることができます。

これらは最近、一般的にベストプラクティスと見なされていますか?

+0

あなたの質問は私を混乱させます。あなたが望むのは、コンストラクタの初期値を宣言するだけで、まさに正しいものです。だから**正確に**あなたは何を求めているのですか? –

+8

'publicリスト D {get;セット; } = new List (); '? – crashmstr

+0

3つのすべてが技術的に正しいです。私が引き継ぐ少しのコードで最初のものを見つけました。私はすべてのプロパティを宣言するオリジナルの背後にある目的を見つけることはありません。実際にクラスのメソッドのどこかでプライベートプロパティを使用しようとしている場合を除いて、実際にプロパティが宣言されていると思っていました。最初のListをプロパティに 'クラスのどこかでプロパティを使う'と指定してみることができます。または、それを無意味なものとして見ることができます。代わりに、私の3番目の例が好きです。最近は一般的にベストプラクティスとみなされていますか?あなたは、用語「プロパティ」を悪用保つ – user5903880

答えて

5

C#6あなたは、このようにそれを行うことができますので:

public IList<int> Prop1 { get; set; } = new List<int> { 1, 2, 3 }; 
+0

これは単に別のユーザーのコメントを繰り返すことです。 – Sach

+0

私はコメントを読んでいない。あなたが望むなら私はansを削除することができます。 – Kostya

0

.NETで同じものだけでなく、ベストプラクティスと推奨事項を達成するために、いくつかの方法があります。それはすべて、オブジェクトとプロパティの要件と責任に依存します。私は優れたプログラミングガイドへのリンクを持つコメントを見ました。これらはほんの数例です。

public class C<T> 
{ 
    public List<T> D { get; set; } = new List<T>(); 
} 

public class C2 
{ 
    public IReadOnlyList<int> D { get; private set; } 

    public C2() 
    { 
     D = new List<int>(); 
    } 
} 

public class C3 
{ 
    private List<int> _d = null; 

    public List<int> D 
    { 
     get 
     { 
      return _d ?? new List<int>(); 
     } 
    } 
} 
関連する問題