下面“Confused”类中的两个方法是否相同?
class MyClass
{
public override string ToString()
{
return "I am confused now";
}
}
class Confused
{
public MyClass GetMyClass()
{
return new MyClass();
}
public T GetMyClass<T>() where T : MyClass, new()
{
return System.Activator.CreateInstance<T>();
}
}
class Program
{
static void Main()
{
Confused c = new Confused();
System.Console.WriteLine(c.GetMyClass());
System.Console.WriteLine(c.GetMyClass<MyClass>());
}
}
它们产生不同的 IL,但是除了让同事感到困惑之外,还有什么理由编写通用版本而不是“直接”版本 :)
最佳答案
如果您编写泛型版本,则可以实例化并返回派生类:
哪里 T : MyClass
此外,对于通用版本,您不需要激活码:
return new T();
这是因为您指定了:
哪里 T : new()
强制执行公共(public)无参数构造函数的通用约束。
关于c# - public T GetMyClass<T>() where T : MyClass, new() {/* 这是没有意义的吗? */},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694792/