我理解自动实现的属性在对象属性方面的概念,但是当它们应用于列表时我遇到了它们并且我不确定发生了什么。他们要么获得列表的整个列表或单个对象,但我不确定。它看起来像这样:
public Ilist<myClass> className {get;set;}
答案 0 :(得分:2)
他们与任何其他财产没有什么不同。它将列表称为对象,而不是单个列表元素。因此,如果您要使用setter,您将为列表本身分配一个值(即重新分配列表以指向不同的列表),而不是设置元素。
答案 1 :(得分:1)
自动属性对容器类型没有任何特殊行为。您的自动属性等同于以下代码:
public IList<myClass> className
{
get
{
return classNamek__BackingField;
}
set
{
classNamek__BackingField = value;
}
}
// generated by compiler; its name is really "<className>k__BackingField"
private IList<myClass> className__BackingField;
所以属性是一个列表对象。 getter返回整个列表对象,setter将列表对象设置为指定的列表对象。
答案 2 :(得分:1)
如果您在理解自动化属性时遇到问题,可以随时将其扩展到带有支持字段的属性,并检查它的外观。
public Ilist<myClass> className {get;set;}
等同于
private IList<myClass> _className;
public Ilist<myClass> className
{
get { return _className; }
set { _className = value; }
}
如您所见,IList<myClass>
实例只有一个字段。因此,您可以在属性中存储一个 IList<myClass>
实例。这就是你get
/ set
使用该属性的原因:整个列表。
但是因为list是一个集合,它本身可以包含多个myClass
个实例。所以你可以从属性中获取它然后枚举,添加新项目等等。
答案 3 :(得分:0)
访问className
时,它会将myClass
个对象的完整列表作为列表返回。您可以使用List属性/方法枚举或访问每个myClass
对象。