public static void Hello<T>(T val)
{
Console.WriteLine("泛型:"+val.GetType().ToString());
} public static void Hello(string val)
{
Console.WriteLine("字符串:" + val.GetType().ToString());
} public static void SayHello<T>(T val)
{
Hello(val);
} public static void Main()
{
Hello("你好");//很显然,调用的肯定是 Hello(string val)
SayHello("你好");//这个呢?
}最近写类库,重构的过程中,修改了一些代码,发现竟然不可以运行了。于是就发现了类似上方的状况。简单的说:
在 SayHello 里的调用 Hello ,我管你什么类型,统统分配到 Hello<T>。不过这点挺无语的。还没来得及学 MSIL……不知道为什么不选择调用【类型符合】的 Hello?
{
Console.WriteLine("泛型:"+val.GetType().ToString());
} public static void Hello(string val)
{
Console.WriteLine("字符串:" + val.GetType().ToString());
} public static void SayHello<T>(T val)
{
Hello(val);
} public static void Main()
{
Hello("你好");//很显然,调用的肯定是 Hello(string val)
SayHello("你好");//这个呢?
}最近写类库,重构的过程中,修改了一些代码,发现竟然不可以运行了。于是就发现了类似上方的状况。简单的说:
在 SayHello 里的调用 Hello ,我管你什么类型,统统分配到 Hello<T>。不过这点挺无语的。还没来得及学 MSIL……不知道为什么不选择调用【类型符合】的 Hello?
public static void Hello<T>(T val)
那么public static void Hello(string val)就没有必要了吧
如果你碰到public bool IsNull <T>(T val){ T == null}呢?
才觉得为什么不“智能”点?因为我是想匹配 Hello(string val)的签名