Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Замечание
Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.
Методы расширения — это функция языка, которая позволяет вызывать статические методы с помощью синтаксиса вызова метода экземпляра. Эти методы должны принимать по крайней мере один параметр, представляющий экземпляр, с которым должен работать метод.
Класс, определяющий такие методы расширения, называется классом "спонсор" и должен быть объявлен как статический. Чтобы использовать методы расширения, необходимо импортировать пространство имен, определяющее класс спонсора.
❌ ИЗБЕГАЙТЕ бездумного определения методов расширения, особенно для типов, которыми вы не управляете.
Если у вас есть исходный код типа, рекомендуется использовать вместо этого обычные методы экземпляра. Если вы не являетесь владельцем и хотите добавить метод, будьте очень осторожны. Либеральное использование методов расширения может загромождать API типов, которые не были разработаны для использования этих методов.
✔️ Рассмотрите возможность использования методов расширения в любом из следующих сценариев:
Чтобы обеспечить вспомогательные функции, относящиеся к каждой реализации интерфейса, если эти функции можно реализовать через основной интерфейс. Это связано с тем, что конкретные реализации не могут быть присвоены интерфейсам. Например,
LINQ to Objectsоператоры реализуются как методы расширения для всех IEnumerable<T> типов. Таким образом, любаяIEnumerable<>реализация автоматически поддерживает LINQ.Если метод экземпляра вводит зависимость от определенного типа, но такая зависимость будет нарушать правила управления зависимостями. Например, зависимость от String к System.Uri вероятно нежелательна, поэтому метод экземпляра
String.ToUri(), возвращающийSystem.Uri, станет неправильным с точки зрения управления зависимостями. Статический метод расширенияUri.ToUri(this string str), возвращающийSystem.Uri, будет гораздо лучше с точки зрения дизайна.
❌ Избегайте определения методов расширения в System.Object.
Пользователи VB не смогут вызывать такие методы для ссылок на объекты с помощью синтаксиса метода расширения. VB не поддерживает вызов таких методов, так как в VB объявление ссылки в качестве объекта заставляет все вызовы метода быть в конце привязки (фактический член определяется во время выполнения), а привязки к методам расширения определяются во время компиляции (ранняя привязка).
Обратите внимание, что руководство применяется к другим языкам, где присутствует то же поведение привязки или где методы расширения не поддерживаются.
❌ НЕ помещайте методы расширения в то же пространство имен, что и расширенный тип, если только не требуется добавлять методы в интерфейсы или для управления зависимостями.
❌ Избегайте определения двух или более методов расширения с одной и той же сигнатурой, даже если они находятся в разных пространствах имен.
✔️ Рассмотрите возможность определения методов расширения в том же пространстве имен, что и расширенный тип, если тип является интерфейсом, и если методы расширения предназначены для использования в большинстве случаев или во всех случаях.
❌ Не определяйте методы расширения, реализующие функцию в пространствах имен, обычно связанных с другими функциями. Вместо этого определите их в пространстве имен, связанном с функцией, к которой они относятся.
❌ Избегайте общего именования пространств имен, выделенных для методов расширения (например, «Расширения»). Вместо этого используйте описательное название (например, "Маршрутизация").
© Часть 2005, 2009 Корпорация Майкрософт. Все права защищены.
Перепечатан с разрешения Pearson Education, Inc. из Руководство по проектированию: Соглашения, идиомы и шаблоны для повторного использования библиотек .NET, 2-е издание Кшиштоф Чвалина и Брэд Абрамс, опубликованное 22 октября 2008 года Addison-Wesley Профессиональный в рамках серии разработки Microsoft Windows.