是否有使用 Type
参数而不是泛型的理由?例如:
// this...
void Foo(Type T);
// ...over this.
void Foo<T>();
在我看来,泛型更加有用,因为它们提供了泛型约束,并且随着C# 4.0的推出,还有逆变性和协变性等其他特性,这些可能是我不知道的。对我来说,泛型形式具有所有优点,而第一种方式没有任何负面影响。那么,是否存在你会使用第一种方式的情况呢?
当你在执行时不知道类型时,可以使用 Absolutely。例如:
foreach (Type t in someAssembly.GetTypes())
{
Foo(t);
}
当 Foo
是泛型时,这样做很痛苦。虽然可行,但很痛苦。
它还允许参数为null
,在某些情况下可能会有帮助。
Foo(someVariable.GetType()); // allowed
Foo<someVariable.GetType()>(); // illegal
实际上它们并不相同。
在第二个例子中,你实际上有一个编译时类型的类(由传递给它的人决定)。因此,你可以调用特定的函数(例如,如果它是某个给定接口的全部)。
在你的第一个例子中,你有一个“Type”类的对象。因此,你仍需要确定它是什么,并进行转换才能对其执行任何有用的操作。