Перегруженные свойства и методы — Visual Basic
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 3 мин
Перегрузка — это создание нескольких процедур, конструктора экземпляра или свойства в классе с одинаковым именем, но с разными типами аргументов.
Перегрузка использования
Перегрузка особенно полезна, если объектная модель предписывает использовать идентичные имена для процедур, работающих с разными типами данных. Например, класс, который может отображать несколько разных типов данных, может иметь 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 Class
Добавьте следующую процедуру в форму.
Sub 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
Добавьте кнопку в форму и вызовите процедуру
ShowTax
Button1_Click
из события кнопки.Запустите проект и нажмите кнопку в форме, чтобы протестировать перегруженную
ShowTax
процедуру.
Во время выполнения компилятор выбирает соответствующую перегруженную функцию, соответствующую используемым параметрам. При нажатии кнопки сначала вызывается перегруженный метод с параметром Price
, который является строкой, и сообщением «Price is a String. Отображается налог 5,12 долл. США.
вызывается со значением Decimal
во второй раз и сообщением «Price is a Decimal. Отображается налог 5,12 долл. США.
См. также раздел
- Объекты и классы
- Сокрытие в Visual Basic
- Оператор Sub
- Основы наследования
- Тени
- ByVal
- ByRef
- Перегрузки
- Тени
Основы языка С#
Основы языка С#
ОглавлениеВВЕДЕНИЕ1. Платформа Microsoft.NET 1.1. Объекты .NET 1.2. Назначение .NET 1.3. Технология .NET 1.3.1. Язык MSIL 1.3.2. Сборки, метаданные и промежуточный код 1.3.3. Особенности разработки приложений .NET 1.3.4. Библиотека базовых классов .NET 1.3.5. Безопасность в .NET 1.4. Язык C# и среда Visual Studio 2005 1.4.1. Консольный проект 1.4.2. Приложение Windows 2. СИСТЕМА ТИПОВ C# 2.1. Встроенные типы языка C# 2.2. Преобразование типов 2.2.1. Проект Types 2.2.2 Семантика присваивания 2.2.4. Примеры преобразований встроенных типов 2.2.5. Преобразования и класс Convert 2. 2.6. Проверяемые преобразования 3. ПЕРЕМЕННЫЕ И КОНСТАНТЫ 3.1. Проект Variables 3.2. Синтаксис объявления 3.3. Время жизни и область видимости переменных 3.3.1. Поля 3.3.2. Глобальные переменные уровня модуля. 3.3.3. Локальные переменные 3.3.4. Глобальные переменные уровня процедуры 3.4. Константы 4. ВЫРАЖЕНИЯ 4.1. Приоритет и порядок выполнения операций 4.2. Перегрузка операций 4.3. Вычисление выражений 4.3.1. Операции «увеличить» и «уменьшить» (increment, decrement) 4.3.2. Операции sizeof и typeof 4.3.3. Операция new 4.3.4. Арифметические операции 4.3.5. Операции отношения 4.3.6. Операции сдвига 4.3.7. Логические операции 4.3.8. Класс Math и его функции 4.4. Класс Random и его функции 5. ОПЕРАТОРЫ ЯЗЫКА C# 5.1. Оператор присваивания 5.2. Блок или составной оператор 5.3. Пустой оператор 5.4. Операторы выбора (условные операторы) 5.5. Операторы перехода 5.6. Операторы цикла 6. ПРОЦЕДУРЫ И ФУНКЦИИ 6.1. Описание процедур и функций (методов класса) 6.2. Вызовы методов класса 6.3. Функции с побочным эффектом 6.4. Методы и их перегрузка 6.5. Рекурсия 7. МАССИВЫ ЯЗЫКА C# 7.1. Одномерные массивы 7.2. Динамические массивы 7.3. Многомерные массивы 7.4. Массивы массивов 7.5. Класс Array 8. СТРОКИ С# 8.1. Класс char 8.2. Класс char[] 8.3. Класс String 8.3.1. Объявление строк. Конструкторы класса String 8.3.2. Строковые константы 8.3.3. Операции над строками 8.4. Класс StringBuilder 8.4.2. Операции над строками 8.4.3. Основные методы класса StringBuilder 8.4.4. Емкость буфера БИБЛИОГРАФИЧЕСКИЙ СПИСОК |
Перегрузка функций в C
Программирование на C1 год назад
от Kalsoom Bibi
Перегрузка функций — очень известная концепция, используемая в объектно-ориентированных языках, имеющих множество функций с одинаковыми именами и разными параметрами в одном коде. Объектно-ориентированные языки программирования, поддерживающие перегрузку функций, включают Java и C++. Поскольку компилятор C не позволяет использовать его в коде, реализовать перегрузку функций в C непросто. мы все еще можем достичь того же самого с некоторой техникой. Давайте начнем эту статью с открытия терминала оболочки Ubuntu 20.04 LTS.
Предварительные условия
- Установка Ubuntu 20.04 LTS
- Установить компилятор GCC
- Получить права доступа sudo
Пример 01: Перегрузка функции в C
Давайте начнем наш первый пример, чтобы увидеть, как перегрузка функции просто не работает в языке C. Мы должны использовать инструкцию «touch» в оболочке терминала, чтобы создать новый документ C-типа. Чтобы открыть этот новый файл, вам нужен редактор файлов. Мы использовали редактор «GNU Nano», чтобы открыть его.
Чтобы начать работу, выполните следующие прилагаемые инструкции.
$ touch test. c
$ nano test.c
После запуска файла в редакторе мы включили, как мы определили, два пользовательских стандартных заголовка ввода-вывода. После заголовка мы определили два пользовательских метода с похожим именем и разными параметрами, то есть «cal». Первый определяемый пользователем метод «cal» принимает 1 аргумент целочисленного типа, а другой «cal» метод принимает два аргумента целочисленного типа. Первая функция просто умножала переданное целочисленное значение на себя и сохраняла его в другую переменную целочисленного типа, «t», которая только что была инициализирована.
После этого рассчитанное значение будет отображаться в оболочке с помощью оператора «printf», используемого в нем. Другая функция принимает в качестве аргумента два целых числа и использует переданные значения для вычисления суммы путем умножения обоих. Рассчитанные значения будут распечатаны в оболочке в соответствии с оператором «printf».
Внутри метода main() мы вызывали оба метода один за другим. Первый метод был вызван при наличии в нем 1 параметрического целочисленного значения. Другая функция с тем же именем была вызвана при передаче двух значений целочисленного типа в ее параметрах. Здесь основной метод закрывается.
Сохраните этот код и закройте файл. Используйте пакет компилятора «GCC», чтобы скомпилировать код и увидеть ошибки перегрузки функции. Команда была дана в выводе изображения ниже. Вы можете видеть, что компиляция этого файла вызывает множество исключений из-за одинаковых имен функций.
Выполните следующую прикрепленную инструкцию.
$ gcc test.c
Пример 02: Альтернатива перегрузке функций
В этом примере мы познакомим вас с альтернативным методом реализации перегрузки функций. Мы снова открыли тот же файл и добавили в него три пакета заголовков с ключевым словом #include. Мы определили две определяемые пользователем функции с одним и тем же именем, заменив в них один символ. Имена обеих функций начинаются с «cal».
Первый метод принимает два значения целочисленного типа в качестве аргумента в своих параметрах. В то время как другой принимает два указателя символьного типа в качестве аргумента в своих параметрах. Первый метод «cal» берет эти два целочисленных значения и складывает их вместе. Вычисленные значения будут возвращены в основной метод. С другой стороны, другой метод «cal» инициализировал другой указатель символьного типа, «z».
Метод strlen() применяется к обеим строковым переменным для получения длины, а метод malloc() применяется к длине для получения размера памяти. Указатель «z» получает память с помощью метода malloc(), так как он должен хранить строковое значение. Метод strcpy() используется для копирования строкового значения переменной-указателя «x» в «z». В то время как метод strcat() используется для добавления значения переменной-указателя «y» в конец «z». Обновленное значение «z» возвращено в метод main(). Мы определили объявление функции с помощью ключевого слова «_Generic».
Метод main() объявляет две целочисленные переменные для передачи в первый метод «cal()». Два символьных указателя были инициализированы строковыми значениями и переданы второму методу «cal()».
Скомпилировал код с пакетом «GCC». После выполнения этого кода мы получили сумму двух целых чисел и объединенную строку.
Чтобы начать работу, выполните следующие прилагаемые инструкции.
$ gcc new.c
$ ./a.out
Заключение:
Это руководство содержит иллюстрацию использования альтернативного метода перегрузки функций в C. Мы рассмотрели пример, чтобы увидеть, как перегрузка функций терпит неудачу в C и как термин _Generic может нас спасти. Если вы внимательно изучили это руководство, то с этого момента вы сможете легко выполнять перегрузку функций в C. Мы надеемся, что вы можете найти эту статью лучше всего.
Об авторе
Kalsoom Bibi
Здравствуйте, я писатель-фрилансер и обычно пишу для Linux и другого контента, связанного с технологиями
Посмотреть все сообщения
Перегрузка функций в C | StudyMite
Что такое перегрузка функций?Перегрузка функций позволяет нам иметь несколько функций с одинаковыми именами, но с разными сигнатурами функций в нашем коде.
Эти функции имеют одинаковое имя, но работают с разными типами аргументов и возвращают разные типы данных.
Таким образом, тип данных, отправляемых функции при ее вызове, будет определять, какая функция будет вызываться.
Перегрузка функций — это функция объектно-ориентированных языков программирования, таких как Java и C++.
Как мы знаем, C не является объектно-ориентированным языком программирования.
Следовательно, C не поддерживает перегрузку функций.
Однако у нас есть альтернатива, если мы вообще хотим реализовать перегрузку функций в C.
Мы можем использовать функциональность перегрузки функций в C с помощью ключевого слова _Generic.
_Generic ключевое слово:Мы поймем, как использовать это ключевое слово для перегрузки функций, на примере.
Допустим, нам нужна функция add(), которую нужно перегрузить.
Эта функция вернет сумму, если ей будут переданы две цифры, и вернет объединенную строку, если ей будут переданы две строки.
Фрагмент кода приведен ниже:
- Функция add(int x, int y) принимает два аргумента целочисленного типа, складывает эти аргументы и возвращает значение целочисленного типа.
- add(char *x, char* y) получает два строковых литерала, объединяет эти строки и возвращает строковый литерал.
- Функция add(a, b) вызывает функцию add(int x, int y), если получает два аргумента целочисленного типа, и вызывает функцию add(char *x, char* y), если получает два строковых литерала.
Таким образом, используя ключевое слово _Generic , можно добиться перегрузки функций в C.
Давайте посмотрим на основной метод и результат для приведенного выше фрагмента кода:
Вывод первой функции printf() равен 3, а второй функции printf() —
helloworld:
Можно также использовать вариативные функции для перегрузки функций.
Функции с переменным числом аргументов могут принимать любое количество аргументов любого типа.