【发布时间】:2018-11-05 11:42:32
【问题描述】:
我有一个包装器类如下,它包装了 TypeA、TypeB 和 TypeC。
class Wrapper
{
class TypeA {get;set;}
class TypeB {get;set;}
class TypeC{get;set;}
}
因此,现在调用者代码不好。因为我必须根据这样的不同类型来确定:
Wrapper wrapper = new Wrapper(TypeA);
if (wrapper.TypeA != null && wrapper.TypeA.SomeProperty != null)
{
return wrapper.TypeA.SomeProperty;
}
if (wrapper.TypeB != null && wrapper.TypeB.SomeProperty != null)
{
return wrapper.TypeB.SomeProperty;
}
Wrapper cwrapper = new Wrapper(TypeA, TypeB);
if (wrapper.TypeA == null && wrapper.TypeB != null && wrapper.TypeB.SomeProperty != null)
{
return wrapper.TypeB.SomeProperty;
}
如您所见,调用者代码还必须检查 TypeA 和 TypeB 以及 TypeC 的大量组合。 我只是想使用一些组合并公开一些策略或属性,这将给我想要的对象,例如:
wrapper.As<TypeA>() 什么的。有什么建议可以避免调用者部分的多次检查吗?
【问题讨论】:
-
可以同时包裹多个对象吗?
-
A、B、C 类型实现的接口相同吗?
-
属性在每种类型中是否具有完全相同的名称。每种类型中的每个属性是否都有对应的属性?您需要像这样访问多少个属性?
-
是的,它可以同时包装多个对象,并且它还有许多不同名称的其他属性。
标签: c# design-patterns composition