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

StackOverflow https://stackoverflow.com/questions/2398514

Вопрос

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

Спасибо

Это было полезно?

Решение

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

myObj.ExtensionMethod();

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

Другие советы

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

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

Образец метода расширения - Смотрите первый параметр это

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

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

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

То же самое для расширения свойств. F # имеет их и У Бу не было их с (по крайней мере) 2006.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top