如何在 C# 中的 class 中创建一个自动实现的列表 属性?
How do I create an auto-implemented list property in a class in C#?
首先,我制作了一个 class 字段,如下所示:
class Person
{
public string name;
public List<Thing> things = new List<Thing>();
public Person(string name)
{
this.name = name;
}
}
并直接更改 class 之外的字段 things
,但后来发现这不是最佳做法,因为 class 的字段应该是私有的,并且可以使用 public 属性代替。我决定将这些字段更改为自动实现的属性,因为我目前不需要在属性中进行任何验证:
class Person
{
public string Name { get; set; }
public List<Thing> Things { get; set; }
public Person(string name)
{
this.Name = name;
}
}
根据自动实现属性的 MSDN 页面 (https://msdn.microsoft.com/en-us/library/bb384054.aspx),编译器为 属性 创建了一个私有支持字段。
但是,对于列表 属性 我不确定编译器是否会自动实例化列表支持字段,所以我的问题是 会让列表作为自动实现的属性像上面的第二个示例一样工作,或者我是否也需要实例化列表,如果是这样我应该怎么做?
I'm not sure whether the compiler automatically instantiates the list backing field
没有。如果不实例化,默认为null。
do I need to instantiate the lists as well, and if so how should I do this?
需要自己实例化。这是 usually/can 在构造函数中完成的。例如:
public Person(string name)
{
this.Name = name;
this.Things = new List<Thing>();
}
首先,我制作了一个 class 字段,如下所示:
class Person
{
public string name;
public List<Thing> things = new List<Thing>();
public Person(string name)
{
this.name = name;
}
}
并直接更改 class 之外的字段 things
,但后来发现这不是最佳做法,因为 class 的字段应该是私有的,并且可以使用 public 属性代替。我决定将这些字段更改为自动实现的属性,因为我目前不需要在属性中进行任何验证:
class Person
{
public string Name { get; set; }
public List<Thing> Things { get; set; }
public Person(string name)
{
this.Name = name;
}
}
根据自动实现属性的 MSDN 页面 (https://msdn.microsoft.com/en-us/library/bb384054.aspx),编译器为 属性 创建了一个私有支持字段。
但是,对于列表 属性 我不确定编译器是否会自动实例化列表支持字段,所以我的问题是 会让列表作为自动实现的属性像上面的第二个示例一样工作,或者我是否也需要实例化列表,如果是这样我应该怎么做?
I'm not sure whether the compiler automatically instantiates the list backing field
没有。如果不实例化,默认为null。
do I need to instantiate the lists as well, and if so how should I do this?
需要自己实例化。这是 usually/can 在构造函数中完成的。例如:
public Person(string name)
{
this.Name = name;
this.Things = new List<Thing>();
}