列表中自动实现的属性有什么作用?它们如何工作?

时间:2014-02-05 17:03:01

标签: c#

我理解自动实现的属性在对象属性方面的概念,但是当它们应用于列表时我遇到了它们并且我不确定发生了什么。他们要么获得列表的整个列表或单个对象,但我不确定。它看起来像这样:

public Ilist<myClass> className {get;set;}

4 个答案:

答案 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对象。