关于泛型方法重载的问题?盼各位高手解答一下!
在一个class里有两个重载方法,如下图所示:
public void InsertPosition(T x,T y)
{
///Method1
}
和
public void InsertPosition(T x,int y)
{
///Method2
}
1.首先编译没有问题。
2.当泛型类型T指定为int型之外的类型时,也完全没有问题。
3.当泛型类型T指定为int型时,会发生什么情况呢?重载消失了,两个方法的形式完全一样,如果两个形式完全一样的方法存在同一个类里,在编译时是通不过的。但是利用泛型时,编译通过了。但是运行时,却不会报错了。只是经过测试,一直是执行第二个方法。
有谁能帮忙解答一下为什么?
[解决办法]
static void TestOverload<T>(C1<T> test, T value)
{
test.Test(value);
}
static void Main(string[] args)
{
C1<int> c = new C1<int>();
C1<string> c2 = new C1<string>();
TestOverload(c, 3); ///执行结果:Non-generic 而不是Test Generic Test
TestOverload(c2, "df"); ///执行结果:Generic Test
}
static void TestOverload<T>(C1<T> test, T value)
{
test.Test(value);
}
static void TestOverload<T>(C1<T> test, int value)
{
test.Test(value);
}
class C1<T>
{
public void Test(int v)
{
Console.WriteLine("Non-generic Test");
}
public void Test(T v)
{
Console.WriteLine("Generic Test");
}
}