2014-02-05 19 views

回答

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:整個列表。

但由於列表是一個集合,它本身可以包含多個myClass實例。所以你可以從屬性中獲得它,然後枚舉,向它添加新的項目等。

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將列表對象設置爲指定的列表對象。

0

訪問className時,它將返回完整列表myClass對象作爲列表。您可以使用List屬性/方法枚舉或訪問每個myClass對象。

2

他們沒有任何其他財產不同。它將列表稱爲對象,而不是單個列表元素。因此,如果您要使用setter,您將爲列表本身分配一個值(即重新分配列表以指向不同的列表),而不是設置元素。

相關問題