2013-10-03 193 views
1

是否可以將我自己的自定義屬性添加到任何類型的對象?將動態屬性添加到.NET類

在這個例子中,對象是List,但我的意思是任何類型的對象(.NET或自定義的)。

延伸。例如List<string>添加一個名爲MyProperty額外的屬性:

List<string> myList = new List<string>(); 
myList.MyProperty = "some value"; 

然後調用一個方法ProcessList(List<string> list)

ProcessList(myList); 

public void ProcessList(List<string> list) 
{ 
    // get the custom property value 

    string myprop = list.MyProperty.ToString(); 
    .................... 
    do other work 
} 
+0

不完全是,但類似的事情是[ExpandoObject](http://msdn.microsoft.com/en-us/library/system .dynamic.expandoobject.aspx) –

+0

不是真的,但你可以換一個'名單'用自己的類型有你的屬性。 – vcsjones

+0

否C#不支持「擴展屬性」。你想要什麼? –

回答

1

號有一個在.NET中沒有 「擴展屬性」 執行。擴展方法更多的是編譯器技巧,並且只能用作靜態方法,因爲它們不需要它們自己的狀態(至少不應該)。

一個屬性需要一個後臺字段,爲了正確實現,需要其他功能。

注意某些框架不支持這一點。例如,如果您的對象來自DependencyObject,則可以使用Attached Properties來實現此功能。

0

不是你所描述的方式。擴展方法可能是最接近你會得到的。

public static class QueryExtensions 
{ 
    public static bool HasMapping(this Demand role) 
    { 
     return role.DemandMappings.Count > 0; 
    } 
} 

你可以使用上面的例子是這樣的:

var role = GetDemand(Request.QueryString["id"]); 
if (role != null) 
{ 
    var mapped = role.HasMapping(); 
} 
+0

這是不是最接近。您正在閱讀OP顯示寫入屬性 –