Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Как выясняется, при наличии метода, в котором определены необязательные аргументы, данное средство может оказаться по-настоящему полезным. Предположим, что метод

DisplayFancyMessage
переписан с целью поддержки необязательных аргументов, для которых указаны подходящие стандартные значения:

static void DisplayFancyMessage(ConsoleColor textColor = ConsoleColor.Blue,

ConsoleColor backgroundColor = ConsoleColor.White,

string message = "Test Message")

{

...

}

Учитывая,

что каждый аргумент имеет стандартное значение, именованные аргументы позволяют указывать в вызывающем коде только те параметры, которые не должны принимать стандартные значения. Следовательно, если нужно, чтобы значение
"Hello!"
появлялось в виде текста синего цвета на белом фоне, то в вызывающем коде можно просто записать так:

DisplayFancyMessage(message: "Hello!");

Если же необходимо, чтобы строка

"Test Message"
выводилась синим цветом на зеленом фоне, тогда должен применяться такой вызов:

DisplayFancyMessage(backgroundColor: ConsoleColor.Green);

Как видите, необязательные аргументы и именованные параметры часто работают бок о бок. В завершение темы построения методов C# необходимо ознакомиться с концепцией перегрузки методов.

Понятие перегрузки методов

Подобно другим современным языкам объектно-ориентированного программирования в C# разрешена перегрузка методов. Выражаясь просто, когда определяется набор идентично именованных методов, которые отличаются друг от друга количеством (или типами) параметров, то говорят, что такой метод был перегружен.

Чтобы оценить удобство перегрузки методов, давайте представим себя на месте разработчика, использующего Visual Basic 6.0 (VB6). Предположим, что на языке VB6 создается набор методов, возвращающих сумму значений разнообразных типов (

Integer
,
Double
и т.д.). С учетом того, что VB6 не поддерживает перегрузку методов, придется определить уникальный набор методов, каждый из которых будет делать по существу одно и то же (возвращать сумму значений аргументов):

' Примеры кода VB6.

Public Function AddInts(ByVal x As Integer, ByVal y As Integer) As Integer

AddInts = x + y

End Function

Public Function AddDoubles(ByVal x As Double, ByVal y As Double) As Double

AddDoubles = x + y

End Function

Public Function AddLongs(ByVal x As Long, ByVal y As Long) As Long

AddLongs = x + y

End Function

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

обращения к единственному методу по имени
Add
. Ключевой аспект в том, чтобы обеспечить для каждой версии метода отличающийся набор аргументов (различий только в возвращаемом типе не достаточно).

На заметку! Как будет объясняться в главе 10, существует возможность построения обобщенных методов, которые переносят концепцию перегрузки на новый уровень. Используя обобщения, можно определять заполнители типов для реализации метода, которая указывается во время его вызова.

Чтобы попрактиковаться с перегруженными методами, создайте новый проект консольного приложения по имени

FunWithMethodOverloading
. Добавьте новый класс по имени
AddOperations.cs
и приведите его код к следующему виду:

namespace FunWithMethodOverloading {

// Код С#.

// Overloaded Add method.

public static class AddOperations

{

// Перегруженный метод Add.

public static int Add(int x, int y)

{

return x + y;

}

// Перегруженный метод Add.

public static double Add(double x, double y)

{

return x + y;

}

// Перегруженный метод Add.

public static long Add(long x, long y)

{

return x + y;

}

}

}

Замените код в

Program.cs
показанным ниже кодом:

using System;

using FunWithMethodOverloading;

using static FunWithMethodOverloading.AddOperations;

Console.WriteLine("***** Fun with Method Overloading *****\n");

// Вызов версии int метода Add

Console.WriteLine(Add(10, 10));

// Вызов версии long метода Add с использованием нового

// разделителя групп цифр

Console.WriteLine(Add(900_000_000_000, 900_000_000_000));

// Вызов версии double метода Add

Console.WriteLine(Add(4.3, 4.4));

Console.ReadLine;

На заметку! Оператор

using static
будет раскрыт в главе 5. Пока считайте его клавиатурным сокращением для использования методов, содержащихся в статическом классе по имени
AddOperations
из пространства имен
FunWithMethodOverloading
.

Поделиться:
Популярные книги

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Попаданка

Ахминеева Нина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка

Возлюби болезнь свою

Синельников Валерий Владимирович
Научно-образовательная:
психология
7.71
рейтинг книги
Возлюби болезнь свою

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Ротмистр Гордеев 2

Дашко Дмитрий
2. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 2

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3

Город драконов

Звездная Елена
1. Город драконов
Фантастика:
фэнтези
6.80
рейтинг книги
Город драконов

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец