gpt4 book ai didi

c# - public T GetMyClass() where T : MyClass, new() {/* 这是没有意义的吗? */}

转载 作者:太空狗 更新时间:2023-10-30 00:44:54 26 4
gpt4 key购买 nike

下面“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com