这两种扩展方法之间是否存在实际差异?
class Extensions
{
public static void Foo<T>(this T obj) where T : class { ... }
public static void Foo(this object obj) { ... }
}
我在Extension Overflow中四处寻找,我遇到了第一个表格,我以前没用过。好奇有什么不同。
答案 0 :(得分:10)
Object
上的扩展方法也适用于值类型。 (他们将被电话打包,降低性能)
<T>
但没有where T : class
的扩展方法也适用于值类型,但不会对它们进行包装。
此外,<T>
上的扩展方法可以编写typeof(T)
来获取其调用的编译时类型。
如果您这样做,请注意
someButton.Extension();
someButton.Extension<Control>();
someButton.Extension<Object>();