メソッドのオーバーライド

基本クラスにvirtualキーワード、派生クラスにoverrideキーワードを設定する

サンプル

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication39
{
    class Program
    {
        static void Main(string[] args)
        {
            TestClass a = new TestClass();
            a.testMethod1();
            Console.ReadKey();
 
        }
    }
 
    class TestBase
    {
        // オーバーライド用のメソッド用意
        public virtual void testMethod1()
        {
            Console.WriteLine("TestBase:testMethod1");
        }
    }
    class TestClass : TestBase
    {
        // overrideを定義して上書きを行う
        public override void testMethod1()
        {
            // base.testMethod1();
            Console.WriteLine("TestClass:testMethod1");
        }
    }
}
 
 
 
感覚としては名前の隠蔽とあまりイメージは変わらないが、明示的に定義しないと判定できないので注意!

多態性

サンプル

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication40
{
    class Program
    {
        static void Main(string[] args)
        {
            // a にはTestBaseクラスを定義
            TestBase a;
            TestClass1 b1 = new TestClass1();
            TestClass2 b2 = new TestClass2();
 
            // TestClass1を参照渡し
            a = b1;
            a.testMethod1();
 
            // TestClass2を参照渡し
            a = b2;
            a.testMethod1();
 
            Console.ReadKey();
        }
    }
 
    // 基本クラス
    class TestBase
    {
        public virtual void testMethod1()
        {
            Console.WriteLine("TestBase:testMethod1");
        }
    }
 
    // 派生クラス1
    class TestClass1 : TestBase
    {
        public override void testMethod1()
        {
            Console.WriteLine("TestClass1:testMethod1");
        }
    }
 
    // 派生クラス2
    class TestClass2 : TestBase
    {
        public override void testMethod1()
        {
            Console.WriteLine("TestClass2:testMethod1");
        }
    }
}
 
 
 
基本クラスもとい、継承元のクラスのインスタンスに参照渡しでオブジェクトを渡すと派生クラスの
クラスのメソッドを実行する。
これを応用して動的にメソッドの切り替えを行うことが可能


最終更新:2011年04月10日 21:47