当我使用带有泛型参数的方法来创建另一个对象时,泛型对象不会选择最具体的构造函数.这听起来令人困惑,所以这里有一些示例代码来证明我的意思......
任何人都可以解释为什么这个程序的输出是:
guid <-- easy - no problem here
object <-- WHY? This should also be "guid"?!
Run Code Online (Sandbox Code Playgroud)
...以及如何使泛型Add<T>函数调用正确的构造函数C?这是代码:
void Main()
{
B b = new B();
C c = new C(Guid.Empty);
b.Add<Guid>(Guid.Empty);
}
public class B
{
List<C> cs = new List<C>();
public void Add<T>(T v) { cs.Add(new C(v)); }
}
public class C
{
public C(Guid c) { Console.WriteLine("guid"); }
public C(object c) { Console.WriteLine("object"); }
}
Run Code Online (Sandbox Code Playgroud)
Tho*_*que 10
重载解析在编译时完成,而不是在运行时完成.因此,当您new C(v)从该Add<T>方法调用时,编译器不知道T实际上是什么Guid,因此它使用唯一保证兼容的重载,这是public C(object c)
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |