You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何调用派生类方法而非基类方法?

如何让子类实例通过父类数组调用自身的方法?

嗨,这个问题其实是C#里多态实现的常见小坑~你现在的代码里,子类ClassB的method只是和父类ClassA的方法同名,但并没有真正重写它,所以调用的时候会按变量的声明类型(ClassA)来执行方法,导致两种情况都输出1。

要实现你想要的效果,只需要两步修改,利用C#的虚方法和重写机制:

  • 把父类的方法标记为可重写的虚方法:在ClassA的method前加上virtual关键字
  • 明确子类重写父类的方法:在ClassB的method前加上override关键字

修改后的完整代码如下:

public class ClassA 
{ 
    public virtual void method() 
    { 
        Console.WriteLine("1"); 
    } 
} 

public class ClassB : ClassA 
{ 
    public override void method() 
    { 
        Console.WriteLine("2"); 
    } 
}

你原来的数组初始化代码不用做任何改动:

ClassA[] array = new ClassA[20]; 
array[0] = new ClassB(); 
array[1] = new ClassA();

现在再调用array[0].method()就会输出2,array[1].method()输出1啦~

原理是:当父类方法被标记为virtual后,C#会在运行时根据对象的实际类型(而不是变量的声明类型)来选择要执行的方法,也就是我们常说的多态特性。如果不加virtual和override,子类的方法只是隐藏了父类的方法,编译时会绑定到声明类型的方法,所以就达不到你想要的效果。

内容的提问来源于stack exchange,提问作者Milan Srdić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:04:31