Overloads (Visual Basic)
Указывает, что свойство или процедура повторно определяет одно или несколько существующих свойств или процедур с таким же именем.
Комментарии
Перегрузка — это практика предоставления нескольких определений для заданного имени свойства или процедуры в одном область. Повторное объявление свойства или процедуры с другой сигнатурой иногда называется скрытием.
Правила
- Контекст объявления. Можно использовать Overloads только в операторе объявления свойства или процедуры.
- Комбинированные модификаторы. Нельзя указать Overloads вместе с shadows в одном объявлении процедуры.
- Обязательные различия.Подпись в этом объявлении должна отличаться от сигнатуры каждого свойства или процедуры, которые она перегружает. Сигнатура включает в себя имя свойства или процедуры, а также следующие элементы:
- число параметров;
- порядок параметров;
- типы данных параметров;
- число параметров типа (для универсальной процедуры);
- тип возвращаемого значения (только для процедуры оператора преобразования).
Все перегрузки должны иметь одно и то же имя, но каждая должна отличаться от всех остальных по одному или нескольким из предыдущих аспектов. Это позволяет компилятору определить, какую именно версию следует использовать, когда код вызывает свойство или процедуру.
- наличие возвращаемого значения (для процедуры);
- тип данных возвращаемого значения (за исключением оператора преобразования);
- имена параметров или параметров типа;
- ограничения для параметров типа (для универсальной процедуры);
- ключевые слова модификаторов параметров (например, ByRef или Optional );
- ключевые слова модификаторов свойств или процедур (например, Public или Shared ).
При использовании Overrides компилятор неявно добавляет Overloads , чтобы упростить работу API-интерфейсов с библиотекой C#.
Модификатор Overloads можно использовать в следующих контекстах:
- Оператор Function
- Operator Statement
- Property Statement
- Оператор Sub
См. также раздел
- Тени
- Перегрузка процедур
- Generic Types in Visual Basic
- Процедуры операторов
- Практическое руководство. Определение оператора преобразования
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
The .NET documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Как посмотреть перегрузки методов в visual studio
Иногда возникает необходимость создать один и тот же метод, но с разным набором параметров. И в зависимости от имеющихся параметров применять определенную версию метода. Такая возможность еще называется перегрузкой методов (method overloading).
И в языке C# мы можем создавать в классе несколько методов с одним и тем же именем, но разной сигнатурой. Что такое сигнатура? Сигнатура складывается из следующих аспектов:
- Имя метода
- Количество параметров
- Типы параметров
- Порядок параметров
- Модификаторы параметров
Но названия параметров в сигнатуру НЕ входят. Например, возьмем следующий метод:
public int Sum(int x, int y)
У данного метода сигнатура будет выглядеть так: Sum(int, int)
И перегрузка метода как раз заключается в том, что методы имеют разную сигнатуру, в которой совпадает только название метода. То есть методы должны отличаться по:
- Количеству параметров
- Типу параметров
- Порядку параметров
- Модификаторам параметров
Например, пусть у нас есть следующий класс:
class Calculator < public void Add(int a, int b) < int result = a + b; Console.WriteLine($"Result is "); > public void Add(int a, int b, int c) < int result = a + b + c; Console.WriteLine($"Result is "); > public int Add(int a, int b, int c, int d) < int result = a + b + c + d; Console.WriteLine($"Result is "); return result; > public void Add(double a, double b) < double result = a + b; Console.WriteLine($"Result is "); > >
Здесь представлены четыре разных версии метода Add, то есть определены четыре перегрузки данного метода.
Первые три версии метода отличаются по количеству параметров. Четвертая версия совпадает с первой по количеству параметров, но отличается по их типу. При этом достаточно, чтобы хотя бы один параметр отличался по типу. Поэтому это тоже допустимая перегрузка метода Add.
То есть мы можем представить сигнатуры данных методов следующим образом:
Add(int, int) Add(int, int, int) Add(int, int, int, int) Add(double, double)
После определения перегруженных версий мы можем использовать их в программе:
Calculator calc = new Calculator(); calc.Add(1, 2); // 3 calc.Add(1, 2, 3); // 6 calc.Add(1, 2, 3, 4); // 10 calc.Add(1.4, 2.5); // 3.9
Result is 3 Result is 6 Result is 10 Result is 3.9
Также перегружаемые методы могут отличаться по используемым модификаторам. Например:
void Increment(ref int val) < val++; Console.WriteLine(val); >void Increment(int val)
В данном случае обе версии метода Increment имеют одинаковый набор параметров одинакового типа, однако в первом случае параметр имеет модификатор ref. Поэтому обе версии метода будут корректными перегрузками метода Increment.
А отличие методов по возвращаемому типу или по имени параметров не является основанием для перегрузки. Например, возьмем следующий набор методов:
int Sum(int x, int y) < return x + y; >int Sum(int number1, int number2) < return number1 + number2; >void Sum(int x, int y)
Сигнатура у всех этих методов будет совпадать:
Sum(int, int)
Поэтому данный набор методов не представляет корректные перегрузки метода Sum и работать не будет .
О программировании и всём, всём, всём
В Visual Studio горячих клавиш огромное количество (даже используются сочетания из вспомогательных клавиш и двух букв). Достаточно много таких сочетаний приведено на официальных плакатах.
В далее те, которыми я пользуюсь достаточно часто.1. Ctrl+K,S — вставляет snippet вокруг выделенного фрагмента текста
Так же этим snippet-ом удобно заключать фрагмент класса/метода в #region
2. Ctrl+M,O — сворачивает все конструкции в открытом cs файле
3. Ctrl+K,C и Ctrl+K,U — комментирует и раскомментирует выбранный фрагмент текста.

4. Ctrl+Space — открывает донаборщик.

Хотя в VS 2010 актуальность этого сочетания не очень велика, там где надо это окно и так выпрыгивает.
5. Ctrl+Shift+Space — при нажатии внутри скобок вызываемого метода показывает варианты перегрузки и инфу по параметрам.
6. Ctrl+R,M — извлечь выделенный фрагмент кода в отдельный метод.

7. Ctrl+Shift+B — построение решения. Ну давайте здесь тоже картинку вставлю:

Ну и в заключении, если еще не ходили, сходить по ссылке в начале статьи и распечатать себе плакатики. Весьма полезная штука.
Перегруженные свойства и методы (Visual Basic)
Перегрузка — это создание нескольких процедур, конструктора экземпляра или свойства в классе с одинаковым именем, но с разными типами аргументов.
Перегрузка использования
Перегрузка особенно полезна, если объектная модель предписывает использовать идентичные имена для процедур, которые работают с разными типами данных. Например, класс, который может отображать несколько разных типов данных, может иметь Display процедуры, которые выглядят следующим образом:
Overloads Sub Display(ByVal theChar As Char) ' Add code that displays Char data. End Sub Overloads Sub Display(ByVal theInteger As Integer) ' Add code that displays Integer data. End Sub Overloads Sub Display(ByVal theDouble As Double) ' Add code that displays Double data. End SubБез перегрузки необходимо создать отдельные имена для каждой процедуры, даже если они выполняют то же самое, как показано ниже:
Sub DisplayChar(ByVal theChar As Char) ' Add code that displays Char data. End Sub Sub DisplayInt(ByVal theInteger As Integer) ' Add code that displays Integer data. End Sub Sub DisplayDouble(ByVal theDouble As Double) ' Add code that displays Double data. End SubПерегрузка упрощает использование свойств или методов, так как предоставляет выбор типов данных, которые можно использовать. Например, перегруженный Display метод, описанный ранее, можно вызвать с помощью любой из следующих строк кода:
' Call Display with a literal of type Char. Display("9"c) ' Call Display with a literal of type Integer. Display(9) ' Call Display with a literal of type Double. Display(9.9R)Во время выполнения Visual Basic вызывает правильную процедуру на основе типов данных указанных параметров.
Правила перегрузки
Перегруженный член для класса создается путем добавления двух или более свойств или методов с одинаковым именем. За исключением перегруженных производных элементов, каждый перегруженный элемент должен иметь разные списки параметров, и следующие элементы нельзя использовать в качестве отличительной функции при перегрузке свойства или процедуры:
- Модификаторы, такие как ByVal или ByRef , которые применяются к элементу или параметрам элемента.
- Имена параметров
- Возвращаемые типы процедур
При Overloads перегрузке ключевое слово является необязательным, но если какой-либо перегруженный элемент использует Overloads ключевое слово, то все другие перегруженные элементы с тем же именем также должны указывать этот ключевое слово.
Производные классы могут перегружать унаследованные члены элементами, имеющими идентичные параметры и типы параметров, что называется затенение по имени и сигнатуре. Overloads Если ключевое слово используется при затенение по имени и сигнатуре, то реализация члена в производном классе будет использоваться вместо реализации в базовом классе, а все остальные перегрузки для этого элемента будут доступны экземплярам производного класса.
Overloads Если ключевое слово опущен при перегрузке наследуемого элемента с помощью элемента, который имеет идентичные параметры и типы параметров, перегрузка называется затенение по имени. Затенение по имени заменяет наследуемую реализацию члена и делает все остальные перегрузки недоступными для экземпляров производного класса и его дегентов.
Модификаторы Overloads и Shadows нельзя использовать с одинаковым свойством или методом.
Пример
В следующем примере создаются перегруженные методы, которые принимают String или Decimal представление суммы в долларах и возвращают строку, содержащую налог с продаж.
Использование этого примера для создания перегруженного метода
- Откройте новый проект и добавьте класс с именем TaxClass .
- Добавьте в класс TaxClass приведенный далее код.
Public Class TaxClass Overloads Function TaxAmount(ByVal decPrice As Decimal, ByVal TaxRate As Single) As String TaxAmount = "Price is a Decimal. Tax is $" & (CStr(decPrice * TaxRate)) End Function Overloads Function TaxAmount(ByVal strPrice As String, ByVal TaxRate As Single) As String TaxAmount = "Price is a String. Tax is $" & CStr((CDec(strPrice) * TaxRate)) End Function End ClassSub ShowTax() ' 8% tax rate. Const TaxRate As Single = 0.08 ' $64.00 Purchase as a String. Dim strPrice As String = "64.00" ' $64.00 Purchase as a Decimal. Dim decPrice As Decimal = 64 Dim aclass As New TaxClass 'Call the same method with two different kinds of data. MsgBox(aclass.TaxAmount(strPrice, TaxRate)) MsgBox(aclass.TaxAmount(decPrice, TaxRate)) End SubВо время выполнения компилятор выбирает соответствующую перегруженную функцию, соответствующую используемым параметрам. При нажатии кнопки сначала вызывается перегруженный метод с параметром Price , который является строкой, и сообщением «Price is a String. Отображается налог 5,12 долл. США. TaxAmount вызывается со значением Decimal во второй раз и сообщением «Price is a Decimal. Отображается налог 5,12 долл. США.
См. также раздел
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
The .NET documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
