Generic methods specialization

转自《Professional C# 4 and .neT 4》

泛型方法可以被重载(overload)。在下面这个例子中,Foo()方法有两个定义。第一个接受一个泛型参数;第二个是接受一个int参数。

在编译期间,如果Foo()接受到了一个int参数,就使用第二个定义。对于其他类型的参数,则使用第一个定义。

    public class MethodOverloads
    {
        public void Foo(T obj)
        {
            Console.WriteLine("Foo(T obj), obj type: {0}", obj.GetType().Name);
        }

        public void Foo(int x)
        {
            Console.WriteLine("Foo(int x)");
        }

        public void Bar(T obj)
        {
            Foo(obj);
        }
    }

    class Program
    {
        static void Main()
        {
            var test = new MethodOverloads();
            test.Foo(33);
            test.Foo("abc");
            test.Bar(44);
        }
    }

 

最后运行结果为:
Foo(int x)
Foo(T obj), obj type: String
Foo(T obj), obj type: Int32

你可能感兴趣的:(C#,methods,class,.net,c#)