Почему я не могу создать дополнительные методы для статических классов?

Когда я пытаюсь создать дополнительный метод для класса Файла, я получаю ошибку при сообщении мне, что я не могу сделать этого, потому что класс статичен. Однако я не вижу, почему это останавливает создание дополнительного метода, что импликация там?

Спасибо

6
задан Gordon Gustafson 8 March 2010 в 00:10
поделиться

4 ответа

Методы расширения вызываются на экземпляре объекта.

myObj.ExtensionMethod();

Если у вас статический класс, вы не можете иметь его экземпляр. Поэтому вызывать метод расширения не на чем.

8
ответ дан 8 December 2019 в 12:58
поделиться

Потому что метод расширения по замыслу должен принимать в качестве первого параметра экземпляр класса, который он расширяет. И очевидно, что вы не можете передать экземпляр File, потому что это статический класс и у него не может быть экземпляров.

5
ответ дан 8 December 2019 в 12:58
поделиться

В обратном порядке, если вы посмотрите на определение любого метода расширения , первым параметром всегда будет экземпляр объекта, для которого он вызывается, о чем свидетельствует ключевое слово this . Логически такое поведение не может работать со статическим классом, потому что экземпляра нет.

Пример метода расширения - см. Первый параметр this

public static class MyExtensions
{
    public static int WordCount(this String str)
    {
        return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
    }
}   
5
ответ дан 8 December 2019 в 12:58
поделиться

Почему я не могу создавать методы расширения для статических классов?

Потому что команда разработчиков C # не реализовала эту функцию (пока). Однако F # решил реализовать это .

То же самое и со свойствами расширения. У F # они есть, а у Boo они есть (по крайней мере) с 2006 года .

0
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: