Когда я пытаюсь создать дополнительный метод для класса Файла, я получаю ошибку при сообщении мне, что я не могу сделать этого, потому что класс статичен. Однако я не вижу, почему это останавливает создание дополнительного метода, что импликация там?
Спасибо
Методы расширения вызываются на экземпляре объекта.
myObj.ExtensionMethod();
Если у вас статический класс, вы не можете иметь его экземпляр. Поэтому вызывать метод расширения не на чем.
Потому что метод расширения по замыслу должен принимать в качестве первого параметра экземпляр класса, который он расширяет. И очевидно, что вы не можете передать экземпляр File, потому что это статический класс и у него не может быть экземпляров.
В обратном порядке, если вы посмотрите на определение любого метода расширения , первым параметром всегда будет экземпляр объекта, для которого он вызывается, о чем свидетельствует ключевое слово this
. Логически такое поведение не может работать со статическим классом, потому что экземпляра нет.
Пример метода расширения - см. Первый параметр this
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
Почему я не могу создавать методы расширения для статических классов?
Потому что команда разработчиков C # не реализовала эту функцию (пока). Однако F # решил реализовать это .
То же самое и со свойствами расширения. У F # они есть, а у Boo они есть (по крайней мере) с 2006 года .