私は次の状況にあり、CLRがどのメソッドを呼び出すかをどのように知っているのか疑問に思いました。
public abstract class Shape
{
public abstract String PrintName();
}
public sealed class Square : Shape
{
public override String PrintName() { return "Square"; }
}
public sealed class Circle : Shape
{
public override String PrintName() { return "Circle"; }
}
次に、各形状をインスタンス化します。
Shape square = new Square();
Shape circle = new Circle();
List<Shape> shapes = new List<Shape> { square, circle };
foreach (Shape s in shapes)
{
Console.WriteLine(s.PrintName());
}
// Output:
// Square
// Circle
では、基本型でメソッドを呼び出しているのに、派生クラスでメソッドを呼び出すことができるのはどうしてですか?私はこれがどのように扱われるか混乱しています。