Методы расширения на Enum - не удается выставить методы на самом Enum - PullRequest
1 голос
/ 02 ноября 2010

Рассмотрим этот Enum:

enum State
{
    On,
    Off
}

... И этот метод расширения:

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

Если я хочу вызвать Foo () , я должен вызвать его на одном из свойств Enum: State.On.Foo() ... Я не могу вызвать его на самом Enum: State.Foo() .

Почему это? И что мне нужно сделать, чтобы иметь возможность вызывать Foo () на самом Enum?

Ответы [ 2 ]

7 голосов
/ 02 ноября 2010

Если вы пытаетесь вызвать State.Foo(), он пытается вызвать статический метод для Foo.Методы расширения расширяют экземпляров типа.Они похожи на добавление методов экземпляра к этому типу, но без возможности добавления какого-либо состояния.

Чтобы привести пример того, почему это не сработает, что вы ожидаете от этого кода?

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

Нельзя подделать добавление статических методов к типу.Это просто не то, что поддерживают методы расширения.

0 голосов
/ 02 ноября 2010

Это связано с тем, что методы расширения можно вызывать только для экземпляра , а не класса .Они просто синтаксический сахар для статических методов.

...