【发布时间】:2016-05-17 12:52:05
【问题描述】:
考虑这个类:
class MyClass<T> where T: class // or T: BaseClass
{
void DoSomething1(T arg){ ... }
void DoSomething2(T arg){ ... }
...
void DoSomethingN(T arg){ ... }
}
并且没有返回T 值!即使在受保护的属性或字段中,后代也不能返回 T。
与硬编码的基类类型相比,在这里使用泛型参数有什么优势吗?
【问题讨论】:
-
我在这里看不到问题/问题。为什么要拥有返回
T的函数?T用作参数。在您的示例中,约束是指T的“参考”能力。如果您选择T : BaseClass,那么可能没有使用通用参数的用例。 -
我会说不,因为我看不到使用具体类型的任何可能性——如果不能使用,定义它就没有任何价值。
-
@JNS 可能还有一些优化空间。如果 T 是密封类,编译器是否可以在无需查看 VMT 的情况下发出调用?
-
@voroninp:没错……但是,我无法想象在任何用例中都能看到这种性能提升。
-
@JNS 这就是我问的原因。顺便说一句,如果泛型约束支持结构类型,那将是合理的。