所以......如果我理解這correcty:
- 你不想在產品類別延伸到其秉承「產品」
- 你不想加入所有的子類ŧ他額外的「情境」屬性到產品類別本身
鑑於此,你正在尋找的是一種方法來添加臨時屬性到一個對象的情景基礎?
我會推薦一個標準的簡單HashTable擴展「自定義屬性」。
private HashTable CustomProperties { get; set; }
//Note: all three of these functions are unecessary if you make the hashtable public, but they do look good as far as an interface goes.
public void AddCustomProperty (String key, Object value)
{
CustomProperties.Add(key, value);
}
public void RemoveCustomProperty (String key)
{
CustomProperties.Remove(key);
}
public object GetCustomProperty (String key)
{
return CustomProperties[key];
}
這使您可以將所需的任何屬性直接存儲到Products對象中作爲KeyValue對。現在,顯示它們會變得更加有趣,因爲您不能再使用直接數據綁定了......與編輯相同。但直接設置框和標籤很容易。
的替代解決方案 - RUNTIME類型
聲明並不真正存在的,但也可以使用像它的自定義類型。
var ExtProduct = new {
MyCustomProp = "whatever I want",
ProductBase = productInstace };
根據需要進行擴展。
你也可以列出
var ExtProductList = from a in ProductList select new {
MyCustomProp = "Whatever I want",
ProductBase = a };
這是幾乎是無用的,當涉及到各地值傳遞給其他的東西非常臨時的事情,但對從連接列出自定義計算大量實用工具做到這一點或UI顯示臨時值。當您需要自定義值可編輯時,它們有點難以捕捉,但並不顯着。
你似乎想避免多態,因爲它會增加一些情況下的複雜性。你能解釋你的爭用嗎? –
對象只是攜帶信息,它不會改變行爲時,只需添加一些額外的屬性。這不是一個優雅的解決方案,如果我爲每個使用對象的情況創建子類 - 我最終會有幾十個類做同樣的事情。從簡單的事情開始,作爲這些子類的命名,我的頭會爆炸。 – Dusan