2010-03-07 4 views
6

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

Thanks

ответ

8

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

myObj.ExtensionMethod(); 

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

+0

Спасибо за ответ. Это позор, но не большая потеря. – dotnetdev

5

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

5

Указанный в обратном порядке, если вы посмотрите на definition of any extension method, первым параметром всегда является экземпляр объекта, на который он вызван, о чем свидетельствует ключевое слово this. Логически это поведение не может работать на статическом классе, потому что экземпляра нет.

Пример методы расширения - см первых паров это

public static class MyExtensions 
{ 
    public static int WordCount(this String str) 
    { 
     return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; 
    } 
} 
0

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

Поскольку команда разработчиков C# не реализовала эту функцию (пока). F# has chosen to implement it.

То же самое для свойств расширения. F # имеет их и Boo has had them since (at least) 2006.