我正在使用一个为我生成一堆类的库。
这些类都继承自一个公共基类,但该基类没有定义所有子类共有的几个方法。
例如:
SubClassA : BaseClass{
void Add(ItemA item) {...}
ItemA CreateNewItem() {...}
}
SubClassB: BaseClass{
void Add(ItemB item) {...}
ItemB CreateNewItem() {...}
}
不幸的是,基类没有这些方法。这会很棒:
BaseClass{
// these aren't actually here, I'm just showing what's missing:
abstract void Add(ItemBaseClass item); // not present!
abstract ItemBaseClass CreateNewItem(); // not present!
}
由于我的 A+B 对象有一个公共基类,而 Item 对象有一个公共基类,我希望能从多态的美妙世界中受益。
不幸的是,因为通用方法实际上并不存在于基类中,所以我不能虚拟地调用它们。例如,这将是完美的:
BaseClass Obj;
Obj = GetWorkUnit(); // could be SubClassA or SubClassB
ItemBaseClass Item = Obj.CreateNewItem(); // Compile Fail: CreateNewItem() isn't in the base class
Item.DoSomething();
Obj.Add(Item); // Compile Fail: Add(...) isn't in the base class
显然铸造会起作用,但我需要知道我拥有哪种类型会否定这些好处。
如何“强制”调用这些方法?我不担心得到一个不实现我试图调用的方法的对象。我实际上可以在 VB 中做我想做的事——我没有得到智能感知,但编译器很高兴并且它可以工作:
CType(Obj, Object).Add(Item) // Note: I'm using C#--NOT VB
同样,我无法控制这些类(我认为排除了部分类)。