Enum上的扩展方法 - 无法在Enum本身上公开方法

时间:2010-11-02 11:47:54

标签: c# enums extension-methods

考虑这个枚举:

enum State
{
    On,
    Off
}

...而且这个扩展方法:

public static void Foo(this Enum e)
{
    // Here be dragons...
}

如果我想调用 Foo(),我必须在Enum的一个属性上调用它:State.On.Foo() ...我无法在Enum本身上调用它: State.Foo()

这是为什么?我需要做什么才能在Enum上调用 Foo()

2 个答案:

答案 0 :(得分:7)

如果您尝试拨打State.Foo(),则会尝试在Foo上调用静态方法。扩展方法扩展了类型的实例。他们就像向该类型添加实例方法,但无法添加任何状态。

举一个为什么这不起作用的例子,你期望这段代码做什么?

int count = IEnumerable<string>.Count();

您无法伪造将静态方法添加到类型中。这不是扩展方法支持的东西。

答案 1 :(得分:0)

这是因为扩展方法只能在实例上调用,而不能在上调用。它们只是静态方法的一种语法糖。