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); } } }
<< 前へ |