Generic <t>()vs Generic(System.Type)。泛型与反思</t>

时间:2012-01-11 06:24:07

标签: c# generics reflection

哪里更适合使用

class Entity<T> {}

new Entity<User>()

而不是

class Entity
{
   public Entity(System.Type type) 
   {
   }
}

new Entity(typeof(User))

在处理反射和代码生成之后,我意识到了System.Type的重要性。经过一个月的发展和熟悉后,我怀疑地回顾了我的选择。

如果您不需要反思,这可能不适用于您。

3 个答案:

答案 0 :(得分:2)

通用方法Entity<T>能够使用泛型类型约束在编译时强制执行规则和功能(即T必须具有公共无参数构造函数并且是引用类型,例)。它不需要每个实例上的类型的任何存储空间,因为Entity<X>Entity<Y>是谨慎的类型 - 但作为对此的重新声明:您不能拥有异构List<Entity<?>> (出于同样的原因,除非你有一个共同的基础类型)。

如果仅在运行时知道类型,则使用泛型会更加困难。

答案 1 :(得分:1)

这取决于您在Entity中的内容。在Entity类中是否有T类型的任何字段或类型为T的方法的参数?如果您只在实体内部执行typeof(T),那么在第二个示例中传递System.Type可能会更简单。

另一个区别是你可以使用泛型约束,所以你可以做class Entity<T> where T: ISomeInterface

答案 2 :(得分:0)

如果你使用第二种方法,你每次都会在实体类中使用类型转换用户对象(最有可能)。如果您使用通用即第一种方法,则不需要这样做。