MyObject obj = new EnchancedMyObject();これですね。これでprintDataを実行すると、MyObjectにあるprintDataが実行されます。派生クラスのprintDataはnewになっているため、新しいメソッドとして追加されます。すなわち、基本クラスのprintDataもちゃんと残っているのです。このため、基本クラスにキャストすると、そちらのメソッドが実行されたのですね。そして、
EnchancedMyObject obj2 = (EnchancedMyObject)obj;こんな具合に、派生クラスにキャストしてからprintDataを呼び出せば、今度はEnchancedMyObjectに用意されたprintDataが実行されます。どちらにキャストするかによって、呼び出されるメソッドが変わるわけです。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
using System;
namespace myapp
{
class Program
{
public static void Main(string[] args)
{
MyObject obj = new EnchancedMyObject();
obj.name = "つやの";
obj.age = 123;
obj.printData();
EnchancedMyObject obj2 = (EnchancedMyObject)obj;
obj2.mail = "syoda@tuyano.com";
obj2.printData();
Console.ReadKey(); // キーを押すまで待つ
}
}
class MyObject
{
public string name = "(noname)";
public int age = 0;
public virtual void printData()
{
Console.WriteLine("名前:{0}, 年齢:{1}歳", name, age);
}
}
class EnchancedMyObject : MyObject
{
public string mail = "(no mail)";
public new void printData()// new をoverride に変更してみる
{
Console.WriteLine("名前:{0}\n\t年齢:{1}歳\n\tメール:{2}.", name, age, mail);
}
}
}
| << 前へ |