非常に単純な基本クラス:
class Figure {
public virtual void Draw() {
Console.WriteLine("Drawing Figure");
}
}
この継承クラス:
class Rectangle : Figure
{
public int Draw()
{
Console.WriteLine("Drawing Rectangle");
return 42;
}
}
コンパイラは、Rectangleの「Draw」がFigureのDrawを非表示にしていると文句を言い、anew
またはoverride
キーワードのいずれかを追加するように要求します。追加するだけnew
でこれが解決します。
class Rectangle : Figure
{
new public int Draw() //added new
{
Console.WriteLine("Drawing Rectangle");
return 42;
}
}
ただし、Figure.Drawにはvoid戻り型があり、Rectangle.Drawはintを返します。ここでさまざまな返品タイプが許可されていることに驚いています...それはなぜですか?