[英]Type parameters vs. generics
是否有理由在泛型上使用Type
参数,即:
// this...
void Foo(Type T);
// ...over this.
void Foo<T>();
在我看来,泛型更有用,因为它们提供了泛型约束和 C# 4.0、逆变和协变,以及可能还有一些我不知道的其他功能。 在我看来,通用形式具有所有优点,并且没有第一个不具有的缺点。 那么,在某些情况下您会改用第一个吗?
绝对:当您直到执行时才知道类型时。 例如:
foreach (Type t in someAssembly.GetTypes())
{
Foo(t);
}
当Foo
是通用的时候这样做是很痛苦的。 这是可行的,但很痛苦。
它还允许参数为null
,这在某些情况下很有用。
好吧,他们真的完全不一样。
对于第二个,您实际上在那里得到了一个编译时类型的类(无论是谁传入的)。 所以你可以在它上面调用特定的函数(比如它是否都是某个给定的接口)。
在您的第一个示例中,您有一个“类型”类的对象。 因此,您仍然需要确定它是什么,并进行转换以使用它做任何有用的事情。
Foo(someVariable.GetType()); // allowed
Foo<someVariable.GetType()>(); // illegal
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.