我正在尝试将派生类分配给基类,然后使用派生类中的方法,这是我的意思的一个例子。
给定一个类Animal
和两个类Cat
和Dog
派生自Animal
public class xxx{
private Animal animal;
public xxx(Cat c){
animal=c
}
public xxx(Dog d){
animal=d
}
}
调用构造函数后,在这个xxx
类中,我希望能够执行animal.catMethod1()
是否将其分配给Cat
,animal.dogMethod3()
是否将其分配给Dog
,这可能吗?
您可能需要查看工厂软件模式来实现此目的:
这里有一篇文章解释了"四人帮"的实现:
https://www.c-sharpcorner.com/article/factory-method-design-pattern-in-c-sharp/#:~:targetText=Factory%20Design%20Pattern%20C%23&targetText=The%2023%20Gang%20of%20Four,Four%20(GoF(%20Design%20Patterns.
我认为这不是一个好的做法(不是 liskov 替换(,但你可以。
(animal as Cat)?.catMethod1();
(animal as Dog)?.dogMethod3();
//By Pattern Matching
switch (animal)
{
case Cat cat:
cat.catMethod1()
break;
case Dog dog:
dog.dogMethod3()
break;
}