我一直在试图产生应该返回一个通用接口根据输入参数的函数的不同对象(比如Item
)(我把它叫做一个上下文)现在getItem(A context)
C#中的静态方法的多态性和重载。
一厂,假设我定义了一个新的上下文类型: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
运算符来检查变量的类型,但我认为我上面介绍的解决方案更优雅一些。