考虑这个枚举:
enum State
{
On,
Off
}
...而且这个扩展方法:
public static void Foo(this Enum e)
{
// Here be dragons...
}
如果我想调用 Foo(),我必须在Enum的一个属性上调用它:State.On.Foo()
...我无法在Enum本身上调用它: State.Foo()
。
这是为什么?我需要做什么才能在Enum上调用 Foo()?
答案 0 :(得分:7)
如果您尝试拨打State.Foo()
,则会尝试在Foo
上调用静态方法。扩展方法扩展了类型的实例。他们就像向该类型添加实例方法,但无法添加任何状态。
举一个为什么这不起作用的例子,你期望这段代码做什么?
int count = IEnumerable<string>.Count();
您无法伪造将静态方法添加到类型中。这不是扩展方法支持的东西。
答案 1 :(得分:0)
这是因为扩展方法只能在实例上调用,而不能在类上调用。它们只是静态方法的一种语法糖。