Метод - это блок кода, который мы можем использовать для его повторного использования, что делает наши классы более читабельными и более простыми в обслуживании. Мы можем выполнить весь код внутри метода, как только мы вызовем этот метод, используя его имя и указав необходимые аргументы.
Сигнатуры методов
Мы можем объявить наши методы, указав сигнатуру метода, состоящую из модификатора доступа (public
, private
, protected
), имени метода и параметров метода. Если мы хотим, чтобы у нашего метода была реализация, у него должны быть две фигурные скобки, чтобы указать тело метода. Мы помещаем наш код между фигурными скобками. Кроме того, мы должны включить возвращаемое значение (void
, int
, double и др.), чтобы наш метод был действительным. Тип возврата не применяется как часть сигнатуры метода, но мы не можем создать метод без него. Таким образом, он внедряется в сигнатуру (или спецификацию).
Метод, возвращающий значение, должен удовлетворять двум условиям. Во-первых, необходимо указать возвращаемый тип перед именем метода. Во-вторых, в теле метода должно быть ключевое слово return
, который будет возвращать значение. С другой стороны, если метод ничего не возвращает, то вместо ключевого слова return используется ключевое слово void
.
В нашем проекте у нас может быть два разных метода с одинаковым именем, но у нас не может быть двух разных методов с одинаковой сигнатурой метода. По крайней мере, одна часть сигнатуры метода должна отличаться. Когда у нас есть два или более метода с одинаковым именем, но разной сигнатурой, это называется перегрузкой метода.
Параметры и аргументы
В предыдущем примере мы видели, что наши методы принимают только один параметр. Но мы можем создать метод, который принимает столько параметров, сколько нам нужно:
public void WriteAllNumbers(int a, int b, int c)
{
Console.WriteLine($"{a} {b} {c}");
}
Важно, чтобы у каждого параметра был свой тип, имя и они были разделены запятыми.
Когда мы создаем метод в сигнатуре, мы создаем параметры (представьте их в качестве держателей места для значения одного и того же типа). Но когда мы вызываем этот метод, мы передаем реальные значения (аргументы) для этих параметров:
WriteAllNumbers(15, 16, 67);
Пример 1: Создайте приложение, которое выводит сумму, вычитание и умножение двух параметров входных данных:
class Program
{
public static void Sum(int first, int second)
{
int result = first + second;
Console.WriteLine($"Sum result: {result}");
}
public static void Subtract(int first, int second)
{
int result = first - second;
Console.WriteLine($"Substraction result: {result}");
}
public static void Multiplication(int first, int second)
{
int result = first * second;
Console.WriteLine($"Multiplication result: {result}");
}
static void Main(string[] args)
{
Console.WriteLine("Enter the first number: ");
int firstArgument = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter the second number: ");
int secondArgument = Convert.ToInt32(Console.ReadLine());
Sum(firstArgument, secondArgument);
Subtract(firstArgument, secondArgument);
Multiplication(firstArgument, secondArgument);
Console.ReadKey();
}
}
Дополнительные параметры
Необязательный параметр имеет значение по умолчанию. Метод с необязательными параметрами может быть вызван без этих аргументов. Но мы тоже можем их предоставить. Если мы предоставим значения в качестве аргументов для необязательных параметров, тогда значения по умолчанию будут переопределены:
public static void MethodWithOptParams(int first, int second = 10)
{
Console.WriteLine(first + second);
}
MethodWithOptParams(20); //result is 30
MethodWithOptParams(20, 35); //result is 55
Резюме
Использование методов очень полезно не только в C#, но и в программировании в целом. Так что наличие этих знаний является большим преимуществом. Не бойтесь использовать их при написании кода, т.к. сделают ваш код более чистым, удобным в обслуживании, читаемым и, прежде всего, многоразовым.