如何从继承类调用父类方法?附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ă
相关产品推荐
相关产品推荐

