<t>或对象上的扩展方法之间是否有任何实际区别?</t>

时间:2010-06-03 21:46:26

标签: c#

这两种扩展方法之间是否存在实际差异?

class Extensions
{
    public static void Foo<T>(this T obj) where T : class { ... }
    public static void Foo(this object obj) { ... }
}

我在Extension Overflow中四处寻找,我遇到了第一个表格,我以前没用过。好奇有什么不同。

1 个答案:

答案 0 :(得分:10)

Object上的扩展方法也适用于值类型。 (他们将被电话打包,降低性能)

<T>但没有where T : class的扩展方法也适用于值类型,但不会对它们进行包装。

此外,<T>上的扩展方法可以编写typeof(T)来获取其调用的编译时类型。
如果您这样做,请注意

之间的区别
someButton.Extension();
someButton.Extension<Control>();
someButton.Extension<Object>();