【发布时间】:2012-04-01 03:58:43
【问题描述】:
我有一个基本类型(A),它有两个衍生物(B 和 C)。基本类型不是抽象的。所以,我有三个对象。
B 和 C 之间的唯一区别是它们都有一个额外的不同属性:
- B.Foo
- C.巴
现在我的代码中有这样的条件:
if(myObject is B)
myDatabindB.DataSource = ((B)myReport).Foo);
else if(myObject is C)
myDatabindC.DataSource = ((C)myReport).Bar);
还有另一种方法:
pnlSomePanel.Visible = myObject is B;
pnlSomeOtherPanel.Visible = myObject is C;
但是您可以想象,当有新类型时,我必须更新所有 if-else 语句。这违反了很多面向对象的原则。
但问题是我想不出一个好的和干净的解决方案来解决这个问题。 您有解决此问题的建议/想法吗?
编辑: 如果重要的话,我正在使用 MVP 模式。
【问题讨论】:
-
我想保持 OOP 并不是那么简单,但是......如果他们只有一个不同的属性,你不能只为同一个对象创建一个新实例并将不同的属性设置为空,对于每个例如,他们不会使用?
-
在这里澄清一下——您无法控制将其更改为抽象的基本类型?
-
@BryanCrosby 我有控制权