限制基类有什么意义?

时间:2016-12-07 01:45:50

标签: c# generics constraints

这两种方法有什么区别?

public void Add<T>(T item) where T : Product

public void Add(Product item)

根据我的理解,两者都只接受Product类型的论据或从中派生出来。

在这里,我使用方法来举例说明问题,但同样适用于类。

2 个答案:

答案 0 :(得分:4)

第一种方法允许你执行诸如typeof(T)这样的事情,你不能用非泛型类型,因为对象本身可能是null(因为你需要调用{{1} })。

您还可以指定返回类型(如果它不是无效的),就像这样:

item.GetType()

另请注意,泛型方法将在编译时(以及在通过反射调用时的运行时)为每个类型创建一个方法。

答案 1 :(得分:2)

两者都相似,因为他们可以对item执行任何操作{/ 1}}。

前者虽然也可以使用与Product类型相关的类型。如果T类型为T,则可以将PremiumProduct添加到item,而另一个则不能,因为List<PremiumProduct>不足以满足要求。{/ p >