Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 87
- Предыдущая
- 87/642
- Следующая
ConsoleColor.Blue);
Даже если оставить в стороне указанное ограничение, то все равно может возникать вопрос: при каких условиях вообще требуется такая языковая конструкция? В конце концов, для чего нужно менять позиции аргументов метода?
Как выясняется, при наличии метода, в котором определены необязательные аргументы, данное средство может оказаться по-настоящему полезным. Предположим, что метод
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
<b>' Примеры кода VB6.</b>
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));
- Предыдущая
- 87/642
- Следующая