Возможный дубликат:
Какие преимущества Вы нашли способы расширения?
Хорошо, во-первых, я понимаю, что это звучит спорно, но я не хочу конфронтации. Я задаю серьезный вопрос из искреннего любопытства (или, может быть, лучше сказать недоумение).
Почему в .NET были введены методы расширения? Какие преимущества они предоставляют, кроме того, что они делают вещи красивыми (и под «красивыми» я имею в виду «обманчиво похожие на методы экземпляров»)?
Для меня любой код, использующий такой метод расширения:
Thing initial = GetThing();
Thing manipulated = initial.SomeExtensionMethod();
вводит в заблуждение, потому что подразумевает, что SomeExtensionMethod
является членом экземпляра Thing
, что вводит разработчиков в заблуждение, заставляя их поверить (по крайней мере, на интуитивном уровне ... вы можете отрицать это, но я определенно заметил это), что (1) SomeExtensionMethod
, вероятно, реализован эффективно, и (2) поскольку SomeExtensionMethod
на самом деле выглядит как часть класса Thing
, он наверняка останется действительным, если Thing
будет пересмотрен в какой-то момент в будущем (пока автор Thing
знает, что он / она делает).
Но дело в том, что методы расширения не имеют доступа к защищенным членам или какой-либо внутренней работе класса, который они расширяют, поэтому они так же подвержены поломкам, как и любые другие статические методы.
Все мы знаем, что это легко может быть:
Thing initial = GetThing();
Thing manipulated = SomeNonExtensionMethod(initial);
Для меня это кажется гораздо большим, если не сказать лучшего слова, честный.
Что мне не хватает? Почему существуют методы расширения?