2017-09-01 118 views
0

有沒有辦法寫這個,所以我不必明確聲明字段_Dc#類屬性聲明

  • 如何在類實現時避開= 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; } 
} 

當實現屬性和分配初始值時,今天的最佳實踐是什麼?

這三者在技術上都是正確的。我在我接管的代碼中找到了第一個。我無法找到聲明所有屬性後臺字段的原始代碼的任何用途。我認爲聲明支持字段並不是自c#v3以來的最佳實踐,除非實際上要在類的方法中的某處使用專用字段,這在此不會發生。

您可以將初始List<>分配給屬性,如'在類中某處使用屬性'。 或者你可以把它看作「毫無意義,而不是像我的第三個例子」。

這些日子通常被認爲是最佳實踐嗎?

+0

你的問題令我困惑。你想要的是完全正確的,並在構造函數中聲明初始值。那麼你究竟在問什麼**? –

+8

'public List D {get;組; } =新列表();'? – crashmstr

+0

這三個都是技術上正確的。我在我接管的代碼中找到了第一個。我沒有找到聲明所有屬性的原始背後的任何目的。我認爲自c#v3以來,實際上聲明的屬性已經脫離了最佳實踐,除非實際上要在類的方法中使用私有屬性。您可以將初始列表分配給屬性,如'在類中某處使用屬性'。或者你可以把它看作毫無意義,而不是像我的第三個例子那樣。這些日子通常被認爲是最佳做法? – 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>(); 
     } 
    } 
}