我會堅持用CodeCaster的想法,也許與Func<T>
沒有其他原因比我得到的戒斷症狀,當我不使用尖括號
破折號...
public class NamedEntity
{
public string Name { get { return _getName(); } }
private Func<string> _getName;
public NamedObject(Func<string> getName)
{
_getName = getName;
}
}
然後因而撥打:
var named = new[]
{
new NamedEntity(() => person.Name),
new NamedEntity(() => product.Name),
new NamedEntity(() => order.Name)
};
與此額外的好處是,當目標對象的屬性的值改變時,它的NamedEntity
參考內太大經由Func
變化,這意味着該LiF內您可以用一次包裝它們的物品的範圍。你也可以與Func
做相反的處理,它可以設定值並得到,並可以適應更多的屬性。
我不能立即確定這是什麼模式代表(如果有的話),但我會猜測適配器模式(這是一種包裝模式)。然而,它也可以被認爲是一個Proxy pattern。不確定。
這看起來像是一個主觀問題,你已經把它們叫做'包裝'類。爲什麼不去那個? – Andorbal 2013-02-18 15:23:50
我個人會和* Proxy *一起去,因爲包裝類被授權代表wrappee行事,即代表它。 – 2013-02-18 15:25:31
我在我賣的框架中實現了這個'組合'模式,它實際上是所有不同類型的代理,其行爲規定了在名稱衝突的情況下會發生什麼(如'名稱')。當然也可以手動實現...也許這就是你要找的東西? – atlaste 2013-02-27 15:37:23