将派生类分配给基,并使用派生方法?



我正在尝试将派生类分配给基类,然后使用派生类中的方法,这是我的意思的一个例子。

给定一个类Animal和两个类CatDog派生自Animal

public class xxx{
private Animal animal;
public xxx(Cat c){
animal=c
}
public xxx(Dog d){
animal=d
}
}

调用构造函数后,在这个xxx类中,我希望能够执行animal.catMethod1()是否将其分配给Catanimal.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;
}

最新更新