1. 程式人生 > >C# 中的泛型與過載

C# 中的泛型與過載

C#中如泛型與過載有相同型別(型別等價),普通函式會優先呼叫,而且在決議過程中,泛型函式中的where條件未計入考慮。測試程式如下:

class A
{
        public override string ToString()
        {
            return "Class A";
        }
    }   
interface ITest
    {
        void test();
    }

    class B:ITest
    {
        public void test()
        {
            Console.WriteLine("Hello,World.");
        }
    }
class Program
    {
        static void Test<T,U>(T t,U u)
            where T:ITest
            where U:class
        {
            t.test();
            Console.WriteLine("where");
        }

        static void Test<T>(T t, string name)
        {
            Console.WriteLine("name:{0}",name);

        }

        static void Main(string[] args)
        {
            B b = new B();
            A a = new A();
            Test(b, "test");//呼叫Test<T>(T t, string name)
            Test(b, a);//呼叫Test<T,U>(T t,U u)
            Console.ReadLine();
        }
    }
測試結果如下:
name:test
Hello,World.
where