Метод – это конструкция в виде блока кода, которая выполняет некоторые действия, и имеет логическую смысловую нагрузку. Аналогом методов языка C#, являются математические функции
Синтаксически метод выглядит следующим образом:
<modifiers> type name(<parameters>)
{
//тело метода
}
- modifiers – необязательные модификаторы доступа;
- type – возвращаемый тип данных:
- если метод не возвращает значения, то используется тип void;
- если возвращает, то в теле метода должно присутствовать ключевое слово return, после которого указывается возвращаемое значение(того же типа что и тип метода);
- name – имя метода;
- parameters – необязательные параметры.
Оператор return
Оператор return завершает выполнение метода, и может возвращать значение. Инструкции которые размещены после return игнорируются. В методе разрешается многократное использование оператора return, но иногда это усложняет читабельность кода программы. Если метод имеет тип void – оператор return может использоваться для преждевременного выхода:
static void Test(int i)
{
if (i <= 0 || i > 5)
{
return;
Console.Write("123"); //эта строка кода всегда игнорируется
}
Console.WriteLine(i);
}
static string ZeroCompare(double number)
{
if (number < 0)
{
return "Число меньше нуля";
}
else if (number > 0)
{
return "Число больше нуля";
}
return "Число равно нулю";
}Передача параметров по значению
Для примитивных типов данных, передача параметров передача параметров в метод, производиться по значению. То есть в качестве аргумента передается копия данных. В теле метода, мы можем изменять переменные параметров, при этом изменения никак не влияют на переданные данные:
using System;
class Program
{
static int Add(int x1, int x2)
{
x1 += x2; //изменение x1 не влияет на переданную в качестве аргумента переменную num1
return x1;
}
static void Main(string[] args)
{
var num1 = 2;
var num2 = 5;
var sum = Add(num1, num2);
Console.WriteLine($"{num1} + {num2} = {sum}");
Console.ReadLine();
}
}
Передача параметров по ссылке
Для передачи переменных по ссылке, используется модификатор ref. Если параметр обозначен ключевым словом ref, то любые изменения этого параметра в теле метода отражаются на переданной переменной:
using System;
class Program
{
static int Mult(ref int x1, int x2)
{
x1 *= x2; //изменение x1 влияет на переменную n1
return x1;
}
static void Main(string[] args)
{
var n1 = 24;
var n2 = 4;
var mult = Mult(ref n1, n2);
//переменная n1 содержит новое значение
Console.WriteLine($"{n1}");
Console.ReadLine();
}
}
Модификатор ref указывается как в описании, так и при вызове метода.
Выходные параметры
Выше рассмотренные параметры имеют название входные, поскольку передаются на вход метода. Кроме этого, в языке C#, есть выходные параметры. Для того, чтобы пометить параметр ка выходной, используется модификатор out.
Рассмотрим метод для деления двух чисел, он возвращает текст ошибки, если деление не возможно, а в качестве выходного параметра – результат операции:
using System;
class Program
{
static string Div(int a, int b, out int result)
{
if (b == 0)
{
result = int.MinValue;
return "Ошибка: Деление на ноль!";
}
else
{
result = a / b;
return "";
}
}
static void PrintResult(string errorText, int res)
{
if (string.IsNullOrEmpty(errorText))
{
Console.WriteLine(res);
}
else
{
Console.WriteLine(errorText);
}
}
static void Main(string[] args)
{
int r1;
var err1 = Div(64, 8, out r1);
PrintResult(err1, r1);
//переменная r2 объявляется в списке аргументов
var err2 = Div(34, 0, out int r2);
PrintResult(err2, r2);
Console.ReadLine();
}
}Именованные аргументы
В C# есть возможность передавать параметры в произвольном порядке, для этого используются именованные аргументы(named arguments). Для явного указания имени аргумента, используется следующий синтаксис:
arg_name : arg_value
Пример программы с именованными аргументами:
static string GetPrettyName(string firstName, string lastName)
{
return firstName + " " + lastName;
}
static void Main(string[] args)
{
var s = GetPrettyName(lastName: "Jackson", firstName: "Anna");
}
Опциональные параметры
В методах можно использовать необязательные или опциональные параметры, которые имеют заданное по умолчанию значение.
Рассмотрим пример метода для вычисления процентов по банковскому депозиту. Обычная депозитная ставка 10%, кроме того, постоянные клиенты могут получить бонус:
static decimal CalcDeposit(decimal sum, decimal percent = 10m, decimal bonus = 0m)
{
return sum + sum * ((percent + bonus) / 100m);
}
Пример использования:
//депозит со ставкой и бонусом по умолчанию
var d1 = CalcDeposit(10000);
//бонус 2.5% (передается как именованный аргумент), ставка по умолчанию - 10%
var d2 = CalcDeposit(15000, bonus: 2.5m);
//передаем все три аргумента
var d3 = CalcDeposit(20000, 15m, 3m);
Необязательные параметры должны быть последними в списке аргументов метода.
Упрощенная запись методов
Начиная с C# 6.0, методы, в которых содержится всего одна инструкция, можно записывать в сокращенной форме посредством лямбда-выражений, это дает возможность сократить количество написанного кода.
К примеру, математическую функцию y = x2 - 2/x, можно записать:
static double Y(double x)
{
return x * x - 2 / x;
}
Использовав лямбда-выражение, код будет иметь следующий вид:
static double Y(double x) => x * x - 2 / x;
Аналогичным образом можно упростить метод, который не возвращает значений:
static void DisplayHello(string n)
{
Console.WriteLine("Привет {0}!", n);
}
Сокращается до:
static void DisplayHello(string n) => Console.WriteLine("Привет {0}!", n);
Локальные функции
Локальные функции
В версии C# 7.0, появилась возможность использовать методы вложенные в метод, такие конструкции носят название – локальные функции. Они поддерживают как классическую, так и упрощенную форму синтаксиса:
static void Main(string[] args)
{
//максимальное из двух целых чисел
int Max(int a, int b)
{
if (a > b)
return a;
return b;
}
// минимальное из двух целых чисел
int Min(int c, int d) => c < d ? c : d;
var t1 = Max(13, 22);
var t2 = Min(42, 56);
}
Для всех рассмотренных методов используется модификатор static, поскольку предполагается их непосредственное использование в главном методе программы – Main.
Методы - это написанный код, который употребляется много раз (много раз вызывается).
И для упрощения кода программы, использование метода очень важно. Метод - это новое слово в языке Си Шарп, старое слово - это функция.
Методы логичны, если данный код выполняется более 2-х раз.
Тогда проще объявить имя метода, какие значения он принимает, и написать код, который бы выпонялся правильно при всех значениях, которые принимает метод.
Для того, чтобы объявить методы в C#, необходимо написать следующее:
ТИП_ВОЗВРАЩАЕМОГО_ЗНАЧЕНИЯ ИМЯ_ФУНКЦИИ (ПЕРЕМЕННЫЕ) { КОД_МЕТОДА }
Если вам не нужно что-то возвращать, то можно писать в ТИП_ВОЗВРАЩАЕМОГО_ЗНАЧЕНИЯ - void.
Примеры:
1. Функция не возвращающая значения и не принимающая аргументы:
void printError()
{
Console.Write("Error! Press Key...");
Console.ReadKey();
}
2. Функция не возвращающая значения, но принимающая аргумент:
void printError(string s)
{
Console.Write("Error! " + s + "Press Key...");
Console.ReadKey();
}
3. Функция не возвращающая значения, но принимающая аргументы:
void printError(string s, int i)
{
Console.Write("Error! " + s + " " + i + "Press Key...");
Console.ReadKey();
}
3. Функция возвращающая значения, и принимающая аргументы:
char shifr(char x, int shifr)
{
x = (char)(x + shifr);
return x;
}
Вот пример программы, с применением методов: работа с методами...
Также к методу можно устанавливать уровень защиты: private, public.
К примеру:
private char shifr(char x, int shifr)
{
x = (char)(x + shifr);
return x;
}
public char shifr(char x, int shifr)
{
x = (char)(x + shifr);
return x;
}
Комментариев нет:
Отправить комментарий