Перегрузка методов c: Руководство C# | Перегрузка методов

Перегруженные свойства и методы — 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

нельзя использовать с тем же свойством или методом.

Пример

В следующем примере создаются перегруженные методы, которые принимают или StringDecimal представление суммы в долларах и возвращают строку, содержащую налог с продаж.

Использование этого примера для создания перегруженного метода
  1. Откройте новый проект и добавьте класс с именем TaxClass.

  2. Добавьте в класс 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
    
  3. Добавьте следующую процедуру в форму.

    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
    
  4. Добавьте кнопку в форму и вызовите процедуру ShowTaxButton1_Click из события кнопки.

  5. Запустите проект и нажмите кнопку в форме, чтобы протестировать перегруженную ShowTax процедуру.

Во время выполнения компилятор выбирает соответствующую перегруженную функцию, соответствующую используемым параметрам. При нажатии кнопки сначала вызывается перегруженный метод с параметром Price , который является строкой, и сообщением «Price is a String. Отображается налог 5,12 долл. США.

TaxAmount вызывается со значением Decimal во второй раз и сообщением «Price is a Decimal. Отображается налог 5,12 долл. США.

См. также раздел

  • Объекты и классы
  • Сокрытие в Visual Basic
  • Оператор Sub
  • Основы наследования
  • Тени
  • ByVal
  • ByRef
  • Перегрузки
  • Тени

Основы языка С#

Основы языка С#
  

ОСНОВЫ ЯЗЫКА C# 2005: Учебное пособие / сост. О. Н. Евсеева, А.Б.Шамшев. — Ульяновск: УлГТУ, 2008. — 132 с.

Представлен базовый язык программирования платформы dotNET C# в объеме классического описания языков высокого уровня. Особенности программирования на С# иллюстрируются примерами программ.

Пособие предназначено для студентов, изучающих высокоуровневые методы информатики и программирования (специальность 080801 «Прикладная информатика (по областям)»), а также для студентов других специальностей, связанных с программированием.



Оглавление

ВВЕДЕНИЕ
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.3. Преобразование к типу object
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.1. Объявление строк. Конструкторы класса StringBuilder
8.4.2. Операции над строками
8.4.3. Основные методы класса StringBuilder
8.4.4. Емкость буфера
БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Перегрузка функций в C

Программирование на C

1 год назад

от 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:

Можно также использовать вариативные функции для перегрузки функций.

Функции с переменным числом аргументов:

Функции с переменным числом аргументов могут принимать любое количество аргументов любого типа.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *