在C#中,子类对象如何直接调用被重写的超类方法?
今天我在C#中学习了一些面向对象的概念,在学习的过程中我发现 子类对象能够直接从其被重写的超类调用方法,我熟悉Java,在Java中,如果一个方法是从其子类重写的 如果一个子类对象调用同一个方法,则执行子类中存在的方法,而不是超类方法,我们使用“super”关键字 我的问题是C#如何提供这样的特性,直接允许子类对象执行被重写的超类方法 下图是子类对象“obj”允许我使用的代码 通过提供“void super.display”选项调用super类方法display 使用在C#中,子类对象如何直接调用被重写的超类方法?,c#,oop,C#,Oop,今天我在C#中学习了一些面向对象的概念,在学习的过程中我发现 子类对象能够直接从其被重写的超类调用方法,我熟悉Java,在Java中,如果一个方法是从其子类重写的 如果一个子类对象调用同一个方法,则执行子类中存在的方法,而不是超类方法,我们使用“super”关键字 我的问题是C#如何提供这样的特性,直接允许子类对象执行被重写的超类方法 下图是子类对象“obj”允许我使用的代码 通过提供“void super.display”选项调用super类方法display 使用base.MethodNam
base.MethodName()
但是您需要将父方法定义为virtual
,并重写子类中的方法。你不是按照你的形象做的
看
从图中可以看出,您没有重写基类中的方法,而是重写了基类中的方法
使用方法隐藏,您不能像屏幕截图中那样从子类调用基类方法:
来自屏幕截图的代码
Sub obj = new Sub();
obj.display();// this will call the child class method
intellisence中对Super.display
的引用可能有缺陷,不能像这样从基类调用隐藏方法
(由于方法隐藏,您还应该得到一个警告,提示您使用new
关键字)
要实现正确的重写,基类中的方法必须是virtual
或abstract
,例如:
public class Super
{
public virtual void display()
{
Console.WriteLine("super/base class");
}
}
public class Sub : Super
{
public override void display()
{
Console.WriteLine("Child class");
}
}
然后你可以这样称呼它:
Super obj = new Sub();
obj.display(); //child class
Super objSuper = new Super();
objSuper.display(); //base class method
如果要从子类内部调用基类方法,请使用base
关键字,如:
public override void display()
{
base.display();
Console.WriteLine("Child class");
}
没有超级关键字,但我认为您需要base
keyword@M.kazemAkhgary我说的是java中的super关键字,而不是C#将来总是以文本形式发布代码,不再以图像形式发布。
public override void display()
{
base.display();
Console.WriteLine("Child class");
}