这个问题具体是关于泛型方法(不是类)。
以下两个陈述之间有什么区别?
public bool MyMethod<T>(T t) where T : IMyInterface {}
public bool MyMethod(IMyInterface t) { }
第一个语句定义泛型方法并约束类型,第二个语句是非泛型方法并指定参数的类型。你为什么要用一个呢?
或者,类似的例子:
public class LibraryItem
{
public string Title;
public int Stock;
}
public void CheckIn<T>(T item) where T : LibraryItem
{
item.Stock += 1;
}
public void CheckIn2(LibraryItem item)
{
item.Stock += 1;
}
同样,使用通用版本优于非通用版本的优势是什么?
答案 0 :(得分:3)
这种简单约束没有太大区别。
在第一个示例中,如果T
是struct
,则非泛型方法将导致装箱。通用方法不需要装箱。
约束不仅限于单个接口,因此有时您无法使用非泛型方法实现相同的功能。
答案 1 :(得分:0)
输出编译的可执行文件可能有所不同,但从编程的角度来看,我看不出2个版本的任何差异:在这两种情况下,你都必须传递一个IMyInterface对象来调用该函数。
除此之外......通用似乎过于复杂,没有任何实际好处。
您知道必须将某些特定的接口类型作为参数处理,不需要泛型。
在框架类List<T>
的对面考虑,这是一个只能处理T对象的列表:在这种情况下,泛型就在手边,而使用接口则不会。