在写一个项目时遇到了一个问题, 百思不得其解特意来CSDN求助,提供测试程序如下所示:
在对泛型对象使用重载方法时, T obj 会被自动识别为 object obj类型,
但测试 obj is T(手动输入一个类型) 时会返回true,
但是给obj 加上(dynamic)后 又能成功识别为T.
具体测试源码:
using System;
namespace ConsoleApplication38
{
public class builder
{
public static string t(DateTime dt) { return "进入了重载方法"+dt.Millisecond; }
public static string t(object obj) { return obj.ToString(); }
}
public class field
{
public T cache;
public string ToString1() { return builder.t((dynamic)cache); }
public string ToString2() { return builder.t(cache); }
//constructor
public field(T k) { cache = k; }
}
class Program
{
static void Main(string[] args)
{
field time = new field(DateTime.Now);
Console.WriteLine("type1:" + time.ToString1());
Console.WriteLine("type2:" + time.ToString2());
Console.ReadKey();
}
}
}
执行结果:
type1:进入了重载方法128
type2:2016-11-23 星期三 02-02-48-07 上午
预期结果应该是type1 和type2 相同才对, 求大神解答到底是什么地方出现了问题?
*class 执行的结果和 construction(T obj) 是一样的