Перегрузка членов
Примечание.
Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.
Перегрузка элементов означает создание двух или более элементов одного типа, которые отличаются только числом или типом параметров, но имеют одинаковые имена. Например, в следующем примере метод WriteLine
перегружен.
public static class Console {
public void WriteLine();
public void WriteLine(string value);
public void WriteLine(bool value);
...
}
Так как только методы, конструкторы и индексированные свойства могут иметь параметры, только эти элементы могут быть перегружены.
Перегрузка является одним из наиболее важных методов для повышения удобства использования, производительности и удобочитаемости многократно используемых библиотек. Перегрузка по количеству параметров позволяет предоставить более простые версии конструкторов и методов. Перегрузка по типу параметра позволяет использовать одно и то же имя для элементов, выполняющих идентичные операции с выбранным набором различных типов.
✔️ ПОПЫТАЙТЕСЬ использовать описательные имена параметров, чтобы указать значение по умолчанию, используемое более короткими перегрузками.
❌ Избегайте произвольного изменения имен параметров в перегрузках. Если параметр в одной перегрузке представляет те же входные данные, что и параметр в другой перегрузке, параметры должны иметь одинаковые имена.
❌ Избегайте несоответствия в упорядочении параметров в перегруженных элементах. Параметры с одинаковыми именами должны отображаться в одной и той же позиции во всех перегрузках.
✔️ СДЕЛАЙТЕ виртуальной только самую длинную перегрузку (если требуется расширяемость). Более короткие перегрузки должны просто вызывать более длинную перегрузку.
❌ НЕ используйте модификаторы ref
или out
для перегрузки элементов.
Некоторые языки не могут разрешать вызовы к подобным перегрузкам. Кроме того, такие перегрузки обычно имеют совершенно другую семантику и, вероятно, являются не перегрузками, а двумя отдельными методами.
❌ НЕ применяйте перегрузки с параметрами в одной и той же позиции и с аналогичными типами, но с разной семантикой.
✔ РАЗРЕШИТЕ передачу значения null
для необязательных аргументов.
✔️ ИСПОЛЬЗУЙТЕ перегрузку элементов вместо определения членов с помощью аргументов по умолчанию.
Аргументы по умолчанию несовместимы с CLS.
Фрагменты: © Корпорация Майкрософт (Microsoft Corporation), 2005, 2009. Все права защищены.
Перепечатано с разрешения Pearson Education, Inc. из книги Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (2-е издание), авторы: Кржиштоф Цвалина (Krzysztof Cwalina) и Брэд Абрамс (Brad Abrams). Книга опубликована 22 октября 2008 г. издательством Addison-Wesley Professional в рамках серии, посвященной разработке для Microsoft Windows.