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

如何从继承类调用父类方法?附C#代码示例求助

两种继承场景下调用ToDo方法的实现方案

没问题,我来帮你搞定这两种继承场景下调用ToDo方法的实现,直接上代码和清晰的解释:


场景1:Program继承classA,无需实例化classA调用ToDo

你当前的classA.ToDo()是实例方法,必须通过类的实例才能触发调用。如果想要避开直接实例化classA的操作,有两种可行方案:

方案1:将classA的ToDo改为静态方法

给classA的ToDo方法加上static关键字,这样就能直接通过类名调用,完全不需要实例化:

class Program : classA {
    static void Main(string[] args) {
        // 直接通过classA类名调用,无需实例
        classA.ToDo();
        // 或者利用继承关系,通过Program类名调用也可以
        // Program.ToDo();
        Console.ReadLine();
    }
}

public class classA {
    // 修改为静态方法
    public static void ToDo() {
        Console.WriteLine("classA");
    }
}

方案2:实例化子类Program(而非classA)

如果不想改动classA的原有定义,因为Program继承了classA,你可以实例化子类Program来调用继承来的ToDo方法,这样就不用直接实例化classA:

class Program : classA {
    static void Main(string[] args) {
        // 实例化子类Program,调用继承的ToDo方法
        new Program().ToDo();
        Console.ReadLine();
    }
}

public class classA {
    public void ToDo() {
        Console.WriteLine("classA");
    }
}

场景2:Program2继承抽象类classB,调用ToDo方法

抽象类classB本身不能直接实例化,但它的子类Program2是可以正常实例化的。同样因为ToDo是实例方法,你可以通过以下两种方式调用:

方案1:实例化子类Program2调用ToDo

这是最常规的做法,通过子类实例来调用抽象类中定义的实例方法:

class Program2 : classB {
    static void Main(string[] args) {
        // 实例化子类Program2,调用继承的ToDo方法
        new Program2().ToDo();
        Console.ReadLine();
    }
}

public abstract class classB {
    public void ToDo() {
        Console.WriteLine("classB");
    }
}

方案2:将classB的ToDo改为静态方法

如果想完全不用实例化任何类,就把classB的ToDo改成静态方法,直接通过类名调用:

class Program2 : classB {
    static void Main(string[] args) {
        // 直接通过抽象类classB的类名调用静态方法
        classB.ToDo();
        Console.ReadLine();
    }
}

public abstract class classB {
    public static void ToDo() {
        Console.WriteLine("classB");
    }
}

内容的提问来源于stack exchange,提问作者Søśø ÐålợȜà ZåȜră

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:31:02