Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# LanguageМетоды расширения


Синтаксис

  • public static ReturnType MyExtensionMethod (этот целевой объект TargetType)
  • public static ReturnType MyExtensionMethod (этот целевой объект TargetType, TArg1 arg1, ...)

параметры

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

замечания

Методы расширения - это синтаксический сахар, который позволяет статическим методам быть вызванными в экземплярах объектов, как если бы они были членами самого типа.

Для методов расширения требуется явный целевой объект. Вам нужно будет использовать this ключевое слово для доступа к методу из самого расширенного типа.

Методы расширений должны быть объявлены статическими и должны находиться в статическом классе.

Какое пространство имен?

Выбор пространства имен для вашего класса методов расширения - это компромисс между видимостью и возможностью обнаружения.

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

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

Важно понимать, что ничто не мешает вам использовать «чужое» пространство имен : Таким образом, если вы хотите расширить IEnumerable , вы можете добавить свой метод расширения в пространство имен System.Linq .

Это не всегда хорошая идея. Например, в одном конкретном случае вам может понадобиться расширить общий тип (например, bool IsApproxEqualTo(this double value, double other) ), но не имеет, что «загрязняет» всю System . В этом случае предпочтительнее выбрать локальное, конкретное пространство имен.

Наконец, также можно поместить методы расширения в пространство имен вообще !

Хороший справочный вопрос: как вы управляете пространствами имен ваших методов расширения?

применимость

Следует проявлять осторожность при создании методов расширения, чтобы гарантировать, что они подходят для всех возможных входных данных и не только релевантны конкретным ситуациям. Например, можно расширить системные классы, такие как string , что делает ваш новый код доступным для любой строки. Если вашему коду необходимо выполнить логику домена для определенного формата в домене, метод расширения не будет подходящим, поскольку его присутствие будет путать вызывающих абонентов, работающих с другими строками в системе.

Следующий список содержит основные функции и свойства методов расширения

  1. Это должен быть статический метод.
  2. Он должен находиться в статическом классе.
  3. Он использует ключевое слово «this» в качестве первого параметра с типом в .NET, и этот метод будет вызываться экземпляром определенного типа на стороне клиента.
  4. Это также показано VS intellisense. Когда мы нажимаем точку . после экземпляра типа, то он приходит в VS intellisense.
  5. Метод расширения должен находиться в том же пространстве имен, в котором он используется, или вам нужно импортировать пространство имен класса с помощью инструкции using.
  6. Вы можете указать любое имя для класса с методом расширения, но класс должен быть статическим.
  7. Если вы хотите добавить новые методы к типу, и у вас нет исходного кода для него, тогда решение должно использовать и применять методы расширения этого типа.
  8. Если вы создаете методы расширения, которые имеют те же методы подписи, что и тип, который вы распространяете, методы расширения никогда не будут вызываться.

Методы расширения Связанные примеры