我会坚持用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