Ponieważ specyfikacja mówi tak ... Teraz są prawdopodobnie dobre powody, dla których tak napisali specyfikację.
Powód, dla którego nie można ich zadeklarować w klasach ogólnych, jest dość oczywisty: biorąc pod uwagę sposób wywoływania metod rozszerzania, gdzie można określić argument typu dla klasy?
Powód, dla którego musi to być klasa statyczna, jest mniej oczywisty, ale myślę, że ma to sens. Głównym zastosowaniem klas statycznych jest grupowanie metod pomocniczych (np. Path
, Directory
, ProtectedData
...), a metody rozszerzeń są zasadniczo metodami pomocniczymi. Nie byłoby sensu, aby na przykład utworzyć instancję Enumerable
lub Queryable
.
Zanim zacznę zadawać to pytanie, szukam statycznego przypadku na klasę i nie znalazłem odpowiedzi, której dotyczy. Przy okazji nie jest to dokładnie to samo pytanie, a moja odpowiedź nie znajduje się w tym poście. – Mehran
Jak to jest * dokładny * duplikat "Dlaczego nie można zadeklarować metod rozszerzenia w ogólnej klasie statycznej?". –
To nie jest duplikat. Raczej bardziej szczegółowe pytanie z tak zwanego podwójnego. –