【发布时间】:2011-10-15 02:01:39
【问题描述】:
我一直在尝试根据函数getItem(A context)的输入参数(我称之为上下文)生成一个工厂,它应该返回一个公共接口的不同对象(比如Item)
现在,假设我定义了一种新的上下文类型:B,它继承自 A。
我想根据传递给工厂的对象是 B 还是 A 类返回不同的项目。
我尝试如下(重载方法):
class Factory
{
static Item getItem(A context) {...}
static Item getItem(B context) {...}
}
如果我做这样的事情,这很好用:
B bContext=new B();
Item it=Factory.getItem(bContext);
但是,如果我强制转换并反对输入A:
A bContext=(A) new B();
Item it=Factory.getItem(bContext);
第一个工厂方法被调用。
我认为即使在强制转换之后,多态性也能确保第二个方法的执行,我想知道我是否遗漏了什么?
我知道我可以继续使用单一方法并使用 is 运算符来检查变量的类型,但我认为我上面介绍的解决方案更优雅一些。
【问题讨论】:
标签: c# polymorphism overloading