转自《Professional C# 4 and .neT 4》
泛型方法可以被重载(overload)。在下面这个例子中,Foo()方法有两个定义。第一个接受一个泛型参数;第二个是接受一个int参数。
在编译期间,如果Foo()接受到了一个int参数,就使用第二个定义。对于其他类型的参数,则使用第一个定义。
public class MethodOverloads
{
public void Foo<T>(T obj)
{
Console.WriteLine("Foo<T>(T obj), obj type: {0}", obj.GetType().Name);
}
public void Foo(int x)
{
Console.WriteLine("Foo(int x)");
}
public void Bar<T>(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>(T obj), obj type: String
Foo<T>(T obj), obj type: Int32