【发布时间】:2026-02-11 11:40:01
【问题描述】:
我有一个基类和两个派生类。我有一个基类变量,它可以包含一个派生类。我想将该变量发送到接收派生类的方法。
由于我不知道变量包含什么,我可以在没有显式转换的情况下解决这个问题吗?
代码:
Class A{
virtual public void foo1() {/.../}
}
Class B : A{
override public void foo1() {/.../}
}
Class C : A{
override public void foo1() {/.../}
}
Class D{
public foo(B argB) {/.../}
public foo(C argC) {/.../}
// in main
D varD = new D();
A varA = new B();
varD.foo(varA); //--->> Problem here need explicit casting
A varC = new C();
varD.foo(varC); //--->> Problem here need explicit casting
我不知道要发送给varD.foo 的派生类,并且我希望对不同派生类进行不同的处理。我能做什么?
【问题讨论】:
-
这段代码能编译吗?我没有看到任何 varB 声明。
-
AbZy,对不起,这是我的错误,我修复了代码
-
根据
foo的D重载正在做什么,您可能可以考虑访问者模式,或者另一个知道如何处理@987654326 的不同子类的合作者@. -
为什么我会觉得
foo(B argB)包含argB.foo1()?重构以利用多态性。
标签: c# inheritance polymorphism