Kon*_*rak 4 c# inheritance overriding
一个非常简单的基类:
class Figure {
public virtual void Draw() {
Console.WriteLine("Drawing Figure");
}
}
Run Code Online (Sandbox Code Playgroud)
这个继承类:
class Rectangle : Figure
{
public int Draw()
{
Console.WriteLine("Drawing Rectangle");
return 42;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器会抱怨Rectangle的"Draw"隐藏了Figure的Draw,并要求我添加一个new或override关键字.只需添加即可new解决此问题:
class Rectangle : Figure
{
new public int Draw() //added new
{
Console.WriteLine("Drawing Rectangle");
return 42;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,Figure.Draw有一个void返回类型,Rectangle.Draw返回一个int.我很惊讶这里允许不同的返回类型...为什么?
你真的读过new修饰语吗?
使用new修饰符显式隐藏从基类继承的成员.要隐藏继承的成员,请使用相同的名称在派生类中声明它,并使用new修饰符对其进行修改.
所以,你已经隐藏了基类的版本.这两个方法具有相同名称的事实并不意味着什么 - 它们与两个名称听起来相同的方法没有关系.
通常应避免这种情况,但编译器将始终知道要调用哪个方法,从而知道它是否具有返回值.如果访问"the"方法如下:
Figure r = new Rectangle();
r.Draw();
Run Code Online (Sandbox Code Playgroud)
然后将调用Figures Draw方法.没有产生任何回报价值,也没有预期.