下面这两个方法在类中“混淆”了吗?

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,但是除了“直接”版本之外,还有什么理由编写通用版本,而不是让同事们感到困惑:)

最佳答案

当然有区别。假设你有一个从我的类派生的第二个类:

class MyClass2 : MyClass { }

那你就可以了
MyClass2 myClass2 = confused.GetMyClass<MyClass2>();

你不能用另一个函数。

09-11 20:31