2017-09-01 123 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>(); 
     } 
    } 
}