カテゴリー
C

独習C#第3版、P489 ジェネリック型、コンストラクタ制約と継承を比較して見る

using System;

namespace Chapter01All
{
    class MyClass
    {
        public MyClass()
        {
            Console.WriteLine("Creaing a MyClass instance.");
        }
        public void SayHello()
        {
            Console.WriteLine("今日は");
        }
    }
    class Test : MyClass
    {      
        public Test()
        {
            Console.WriteLine("Creating a Test instance.");    
        }
        public void SayGoodBye()
        {
            SayHello();         //今日は
            Console.WriteLine("さようなら");
        }
    }
    class GenericConstractorDemo
    {
        static void Main()
        {
            Test t1 = new Test();
            t1.SayHello();      //今日は
            t1.SayGoodBye();            
        }
    }
}

using System;

namespace Chapter01All
{
    class MyClass
    {
        public MyClass()
        {
            Console.WriteLine("Creaing a MyClass instance.");
        }
        public void SayHello()
        {
            Console.WriteLine("今日は");
        }
    }
    class Test<T> where T : new()
    {
        T obj;
        public Test()
        {
            Console.WriteLine("Creating a Test instance.");
            obj = new T();
        }
        public void SayGoodBye()
        {
            Console.WriteLine("さようなら");
            //SayHelloを呼び出せない。継承であれば、出来た。
        }
    }
    class GenericConstractorDemo
    {
        static void Main()
        {
            Test<MyClass> t1 = new Test<MyClass>();
            t1.SayGoodBye();    //MyClassのSayHelloを呼び出せない。

            MyClass objA = new MyClass();
            objA.SayHello();    //MyClassのインスタンスは出来る。
        }
    }
}

MyClassのSayHelloを呼び出せるのか?出来ないのか?それだけではないと思いますが、違いが分からない。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

inserted by FC2 system