繁体   English   中英

类型参数与泛型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM