Содержание:
- Методы позволяют нам инкапсулировать поведение и функциональность в объекты, которые мы создаем в нашем коде.
- Метод объявляется с использованием сигнатуры.
- private — наиболее ограничительный, допускающий доступ к методу только из содержащего его класса или структуры
- public — доступ из любого фрагмента кода в рамках приложения
- protected — позволяет получить доступ из содержащего класса или из производных классов
- internal — доступ из файлов внутри одной сборки
- static — указывает, что метод является статическим членом класса, а не членом экземпляра конкретного объекта
- Тип возвращаемого значения — используется для указания типа возвращаемого значения. Используйте void, если метод не возвращает значение
- Идентификатор (имя) метода — все методы должны иметь идентификатор (имя), чтобы была возможность вызывать метод в коде. Правила идентификаторов применяются и к именам методов
- Список аргументов (параметров) — разделенный запятыми список аргументов, передаваемых в метод
- Чтобы вернуть значение из функции, используйте оператор:
- Если вместо возвращаемого типа у нас присутствует ключевое слово
void, то это означает, что функция не вернет никакого значения. - Можно определить функцию в том же классе, что и функцию
Main(), или определить ее в другом классе. - Все методы или функции в си шарп должны быть статическими, что означает, что их можно вызвать без создания класса объекта.
- Чтобы методы (функции), описываемые в одном классе, сделать видимыми в другом, они должны быть описаны с помощью модификатора доступа
public - Если метод (функция) вызывается в том же классе, модификатор доступа
publicне требуется.
Сигнатура метода состоит из:
Модификатор доступа — откуда этот метод может быть вызван. Некоторые из них:
Пример функции (метода):
В примере:public модификатор доступа,Boolean тип возвращаемого значения,StartService идентификатор (имя),string serviceName параметр (аргумент).
ВЫЗОВ МЕТОДА / ФУНКЦИИ
В этом примере:a — ref аргумент (входно-выходной);res — out аргумент (выходной).
ВОЗВРАТ ЗНАЧЕНИЯ ИЗ ФУНКЦИИ / МЕТОДА
Три подхода для возврата значений в си шарп:
ref (входно-выходной параметр)out (выходной параметр)out и ref — параметры. Out – выходные, ref – входно-выходные.ref-параметры перед вызовом функции обязательно должны быть инициализированы, иначе – ошибка компилятора. При вызове функции также указываются ключевые слова out и refюref, второй — с ref:out, чтобы указать, что значения тих параметров будут возвращены. При вызове также указывается ключевое слово out:out:Результат будет:
25 использование out
ref используется для возврата значений из метода. При использовании ref модификатор необходимо, чтобы сначала данные аргументы были инициализированы значениямиПЕРЕГРУЗКА МЕТОДОВ / ФУНКЦИЙ
Задания и лабораторные си шарп
Выполнить: Создайте метод Sum(), который принимает два целочисленных аргумента и суммирует их. Метод не возвращает никакого значения (именно поэтому вы должны использовать ключевое слово void).
Указание: Необходимо использовать ключевое слово static в сигнатуре метода, потому что основная функция статична, и мы не можем вызвать нестатический метод из статического метода.
Пример выполнения:
Введите два числа 20 40 Сумма 20 + 40 = 60
[Название проекта: Lesson_5Lab1, название файла L5Lab1.cs]
Алгоритм:
- Запустите Visual Studio.
- Создайте консольное приложение, назовите проект
Lesson_5Lab1. - В окне Solution Explorer (Обозреватель решений) найдите файл
Program.csи переименуйте его вL5Lab1.cs. - В главной функции запросите пользователя ввести два числа:
- Поместите курсор после закрывающей фигурной скобки функции
Main()и нажмите клавишу enter. Мы делаем это потому, что нельзя помещать методы/функции внутри другой функции. - Объявите новый метод
Sum(), который будет использоваться для суммы переданных в него значений: - Теперь мы можем вызвать этот метод из основной функции. Введите следующий код в фигурные скобки
Main(): - Щелкните
CTRL+F5, чтобы запустить приложение без отладки. - Созданная нами функция
Sum()не возвращает значения. Теперь мы изменим этот метод так, чтобы он возвращал результат вызывающему методу (основному методу, откуда он был вызван). - Закоментируйте код функции
Sum(), используя горячие клавиши[CTRL]+k+c: - Установите курсор после комментариев и введите следующий код:
- Затем нам нужно изменить способ вызова метода. Объявите целочисленную переменную (в функции
Main()), чтобы получить возвращаемое значение. Выведите результат в окно консоли - Запустите приложение. Результаты должны быть одинаковыми.
- Давайте теперь перегрузим наш метод
Sum(). Для этого мы создадим два дополнительных метода с одинаковыми названиями. - Поместите курсор после метода
Sum(). Сначала создайте метод, который принимает три целых числа: - Этот метод использует то же имя, что и предыдущий метод
Sum(), который принимает два целых числа, но параметры здесь указывают, что метод ожидает три целых числа в качестве аргументов. Компилятор «узнает», какой метод следует вызвать, основываясь на количестве переданных аргументов. - Затем введите следующий код для создания метода
Sum(), принимающего два вещественных аргумента (типаdouble): - Наконец, измените код в
Mai (), который вызывает данные методы: - Запустите приложение еще раз и проверьте выходные данные. Вы должны увидеть правильные результаты суммы для всех трех различных вызовов. Несмотря на то, что у всех них идентификатор
Sum, компилятор выбирает правильный метод для вызова на основе сигнатуры метода. Именно так работает перегрузка метода.
... Console.WriteLine("Введите два числа"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); ...
... static void Sum(int first, int second) { int sum = first + second; Console.WriteLine($"Сумма {first} + {second} = {sum}"); } ...
void.... static int Sum(int first, int second) { int sum = first + second; return sum; } ...
int в сигнатуре (static int Sum(...)).Обратите внимание, что имена параметров, которые мы указали здесь в сигнатуре метода, могут не совпадать с именами аргументов, которые мы передали. Эти параметры становятся локальными переменными в рамках этого метода.
... static void Main(string[] args) { int result = Sum(a, b); Console.WriteLine($"Сумма {a} + {b} = {result}"); } ...
Перегрузка метода / функции:
static int Sum(int first, int second, int third) { int sum = first + second + third; return sum; }
... static double Sum(double first, double second) { double result = first + second; return result; } ...
static void Main(string[] args) { ... int result = Sum(a, b); Console.WriteLine($"Вызов Sum() с двумя аргументами: {result}"); int result3 = Sum(10, 50, 80); Console.WriteLine($"Вызов Sum() с тремя аргументами: {result3}"); double dblResult = Sum(20.5, 30.6); Console.WriteLine($"Вызовg Sum() с вещественными аргументами: {dblResult}"); }
Выполнить: Вводятся три числа — длины трех сторон треугольника. Создайте функцию Perimeter(), которая вычисляет периметр треугольника по длинам трех его сторон.
Указание 1: Метод Perimeter() должен принимать в качестве аргументов три целых числа.
Указание 2: Метод не должен возвращать никакого значения, поэтому вы должны использовать ключевое слово void в сигнатуре:
Указание 3: Не забудьте преобразовать введенные значения в целые числа. Например:
Пример выполнения:
Введите значения для трех сторон треугольника: 3 5 6 Периметр: 14
[Название проекта: Lesson_5Task1, название файла L5Task1.cs]
Выполнить: Необходимо переделать предыдущую задачу, теперь функция периметр должна возвращать целое значение. Напомним задание: Вводятся три числа — длины трех сторон треугольника. Создайте функцию Perimeter(), которая вычисляет периметр треугольника по длинам трех его сторон.
Указание 1: Метод Perimeter() должен принимать в качестве аргументов три целых числа.
Указание 2: Метод должен возвращать значение типа integer, поэтому вы должны использовать ключевое слово int в сигнатуре:
Указание 3: Не забудьте преобразовать введенные значения в целые числа. Например:
Пример выполнения:
Введите значения для трех сторон треугольника: 3 5 6 Периметр: 14
[Название проекта: Lesson_5Task2, название файла L5Task2.cs]
Выполнить: Создайте метод GetPow(), который принимает два целочисленных аргумента — число и степень. Метод возвращает результат возведения числа в степень.
Указание 1: Необходимо использовать служебное слово static, потому что основная функция static, а мы не можем вызвать нестатический метод из статического метода.
Указание 2: Функция возвращает целочисленное значение, поэтому необходимо использовать int в сигнатуре функции:
Пример выполнения:
Введите два числа – число и степень: 2 4 число 2 возведенное в степь 4 = 16
[Название проекта: Lesson_5Lab2, название файла L5Lab2.cs]
Алгоритм:
- Запустите Visual Studio.
- Создайте консольное приложение, назовите проект
Lesson_5Lab2. - После закрывающей скобки функции
Mainсоздайте функциюGetPow: - Объявите переменную
resultдля хранения результата и возврата этого значения из функции. - Внутри функции создайте цикл, в котором накапливается произведение числа. Цикл должен выполнится
powNumраз: - Вызовите созданный метод внутри функции
Main: - Запустите приложение и посмотрите на результат.
- Теперь вместо конкретных чисел (2 и 4) запросите эти числа у пользователя. Затем измените код вызова функции:
- Запустите приложение и протестируйте результат с разными значениями.
- Сохраните проект.
static GetPow( baseNum, powNum) {…}
baseNum и аргумент powNum. Внутри функции необходимо возвести baseNum в степень powNum.result = 1; … return result;
for ( i=0; i<powNum; i++) { result = result * baseNum; }
1 * baseNum, результат сохраняется в переменной result. За две итерации имеем baseNum * baseNum. За три – baseNum * baseNum * baseNum и т. д. Мы повторяем это действие каждую итерацию.Console.WriteLine("Число {baseNum} возведенное в степень {powNumNum} = {GetPow(2,4)} ");
Console.WriteLine ("Введите два числа – число и степень числа: "); a = Int32.Parse(Console.ReadLine()); b = Int32.Parse(Console.ReadLine()); Console.WriteLine(GetPow(a,b));
Выполнить: Создайте метод Distance который вычисляет расстояние между двумя точками на плоскости. Координаты точек вводятся (переменные x1,y1 — для первой точки, и x2,y2 — для второй).
Указание 1: Метод Distance() принимает 4 аргумента (координаты точек).
Указание 2: Метод не должен возвращать значение, поэтому следует использовать ключевой слово void в сигнатуре:
Указание 3: Для подсчета расстояния между двумя точками на плоскости используйте формулу:

Пример выполнения:
Введите координаты двух точек (четыре целых числа: x1, y1, x2, y2): 1 -2 4 2 Расстояние: 5
[Название проекта: Lesson_5Task3, название файла L5Task3.cs]
Выполнить: Необходимо переделать предыдущее задание. Создайте метод Distance который вычисляет расстояние между двумя точками на плоскости. Координаты точек вводятся (переменные x1,y1 — для первой точки, и x2,y2 — для второй).
Указание: Метод должен возвращать вещественное значение (double):
Пример выполнения:
Введите координаты двух точек (четыре целых числа: x1, y1, x2, y2): 3.2 3.4 8 7.1 Расстояние: 6.0605
[Название проекта: Lesson_5Task4, название файла L5Task4.cs]
Выполнить: Создайте метод Minmax() который принимает два целочисленных аргумента по ссылке (ref) и меняет их значения таким образом, что первый становится максимальным, а второй — минимальным (меняет значения аргументов, если требуется). Создайте перегруженный метод Minmax для трех параметров.
Указание 1: Необходимо использовать ключевое слово static в сигнатуре создаваемого метода, т.к. функция Main тоже static, невозможно вызвать не static метод из static метода.
Указание 2: Метод не возвращает значения значит, используется ключевое слово void в сигнатуре).
Пример выполнения:
Введите два числа 2 4 Результат после метода Minmax : 4 2 Введите три числа 2 4 3 Результат после перегрузки метода Minmax : 4 3 2
[Название проекта: Lesson_5Lab3, название файла L5Lab3.cs]
Алгоритм:
- Создайте консольное приложение, назовите проект
Lesson_5Lab3. - В окне Solution Explorer (Обозреватель решений) найдите файл
Program.csи переименуйте его вL5Lab3.cs. - В теле функции
Mainпопросите пользователя ввести два числа. Присвойте введенные значения переменным: - Затем, то же самое сделайте для перегруженной функции с тремя аргументами. Попросите пользователя ввести три числа и присвойте введенные значения переменным:
- Для добавления метода установите курсор после тела функции
Main(). - Объявите метод
Minmax(), который будет менять значения переменных, если это потребуется. Используйте модификаторrefдля аргументов: - Найдите максимальное и минимальное значения, используя стандартные функции
Min()иMax(). Присвойте найденные значения соответствующим переменным (первый аргумент должен быть больше второго): - Поскольку созданный метод
Minmaxне возвращает никакого значения, то новые значения переменных будут передаваться в основную программу, благодаря модификаторуref. - Теперь можно вызвать созданный метод из функции
Main: - Запустите приложение и проверьте результат.
- Чтобы свернуть или развернуть код какого-либо метода, можно использовать горячие клавиши
Ctrl+M (дважды). - Установите курсор после метода
Minmax()и создайте перегруженный метод (с таким же именем) для трех аргументов: - Наконец добавьте вызов метода из функции
Main(): - Запустите приложение и проверьте результат. Несмотря на то, что имена у созданных методов одинаковы, компилятор вызовет нужный метод, исходя из количества аргументов.
... Console.WriteLine("Введите два числа"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); ...
... Console.WriteLine("Введите три числа"); a = int.Parse(Console.ReadLine()); b = int.Parse(Console.ReadLine()); int c = int.Parse(Console.ReadLine()); ...
... static void Minmax(ref int a, ref int b) { ... } ...
ref используется для того, чтобы значение аргумента передалось из основной программы в создаваемую функцию и, наоборот, из функции измененное значение должно возвратиться в основную программу. Ref аргументы должны быть инициализированы до их вызова, иначе возникнет ошибка. При вызове модификатор ref также указывается.static void Minmax(ref int a, ref int b)
{
int max = Math.Max(a, b);
int min = Math.Min(a, b);
a = max;
b = min;
...
... Minmax(ref a,ref b); Console.WriteLine($"Результат после метода Minmax: {a}, {b}"); ...
Перегруженный метод (функция):
... static void Minmax(ref int a, ref int b, ref int c) { Minmax(ref a, ref b); Minmax(ref b, ref c); Minmax(ref a, ref b); } ...
a и b, затем из b и c, и после — из a и b еще раз, так как значения переменных могли уже поменяться к этому моменту.... Minmax(ref a,ref b, ref c); Console.WriteLine($"After overloaded Minmax the result is: {a}, {b}, {c}"); ...
Выполнить: Вводится двузначное целое число. Создайте метод ChangeDigits(), который принимает введенный аргумент по ссылке и изменяет его значение так, чтобы первая цифра нового числа была второй цифрой введенного числа и, наоборот, вторая цифра нового числа была первой цифрой введенного числа. Например, если ввести 45, то результирующее число будет равно 54.
Указание 1: Метод ChangeDigits() принимает аргумент с модификатором ref.
Указание 2: Метод не возвращает значения:
Указание 3: Сначала необходимо получить цифры из числа. Затем, поменяв местами цифры, сделать новое число. Пример создания нового числа из двух цифр:
если даны цифры 2, 3 2*10 + 3 = 23
Пример выполнения:
Введите двузначное число: 58 Результат: 85
[Название проекта: Lesson_5Task5, название файла L5Task5.cs]
Выполнить: Вводятся два двузначных целых числа. Создайте функцию BitwiseSum(), которая вычисляет их побитовую сумму по модулю 10. Например, побитовая сумма чисел 34 и 59 является числом 83 (3 + 5 = 8; 4 + 9 = 13, 13%10 = 3).
Указание 1: Функция BitwiseSum() имеет два аргумента.
Указание 2:Функция возвращает целочисленное значение int:
Указание 3: Сначала необходимо получить цифры из числа. Затем, поменяв местами цифры, сделать новое число. Пример создания нового числа из двух цифр:
если даны цифры 2, 3 2*10 + 3 = 23
Введите двузначное число: 34 59 Побитовая сумма чисел 34 и 59 = 83
[Название проекта: Lesson_5Task6, название файла L5Task6.cs]
Выполнить: Создайте функцию MinmaxSeq(), которая принимает два аргумента по ссылке (ref аргументы) — минимальное и максимальное значение вводимой последовательности чисел. Запросите у пользователя ввести последовательность, которая должна закончиться 0 (если вводится 0, то ввод завершается). Функция должна выполнять поиск максимального и минимального значения последовательности и возвращать результат.
Указание 1: Функция не должна возвращать значениен (поэтому в объявлении функции используется void). Параметры ref — это параметры ввода-вывода, это говорит о том, что значения этих параметров меняются внутри функции и возвращаются в основную программу с вызовом фнукции.
Указание 2: Необходимо использовать ключевое слово static в объявлении метиода, так как функция Main тоже статическая, а нестатическая фнукция не может быть вызвана внутри статической.
[Название проекта: Lesson_5Lab4, название файла L5Lab4.cs]
Пример вывода:
Введите полседовательность и закончите ввод нулем: 2 4 8 3 0 минимальное: 2, максимальное: 8
Алгоритм:
- Создайте Консольное приложение и назовите его
Lesson_5Lab4. - В окне Обозреватель решений найдите файл
Program.csи переименуйте его вL5Lab4.cs. - В функции
Mainобъявите две переменные для хранения минимального и максимального значения последовательности. Присвойте им начальные значения: для переменнойmin— наибольшее возможное целое число, для переменнойmax— наименьшее возможное целое число: - Функцию, которую мыходит создать, будет называться
MinmaxSeq(), и она будет принимать два аргумента по ссылке — переменныеminиmax. Сначала давайте вызовем пока еще несозданный метод из функцииMain, сразу после инициализации переменныхminиmax: - C# может «самостоятельно» добавлять объявления фнукций. Давайте попросим сделать это. Наведите курсор мыши на вызов функции и щелкните стрелку рядом с появившейся лампочкой:
- Щелкните по фразе «Сгенерировать метод…». Псоле этого у нас готово объявление функции:
- Удалите строку внутри функции.
- Теперь необходимо добавить код функции. Но сначала попросим пользователя ввести числа последовательности.
- Чтобы постоянно не печатать класс
ConsoleиMath, подключите их в виде директив в самом начале кода: - Теперь нет необходимости полностью печатать
Console.ReadLine()илиConsole.WriteLine(...), достаточно напечататьReadLine()илиWriteLine(...). - Попросителя пользователя ввести последовательность:
- Чтобы ввести числа последовательности необходимо использовать цикл
do..while: - Внутри цикла необходимо проверять элементы последовательности на максимум и минимум.
- Теперь осталось вывести
minиmaxзначения в функцииMain: - Запустите приложение и проверьте результат.
... int max = int.MinValue; int min = int.MaxValue; ...
int max = int.MinValue; int min = int.MaxValue; MinmaxSeq(ref max, ref min); // новый код



... private static void MinmaxSeq(ref int max, ref int min) { WriteLine("Введите последовательность и закончите ввод нулем"); } ...
int a; do { a = Int32.Parse(ReadLine()); } while (a != 0);
... if (a > max && a != 0) { max = a; } if (a < min && a != 0) { min = a; } ...

Выполнить: Создайте функцию PosNegSeq(), которая принимает два аргумента по ссылке — счетчики положительных чисел последовательности и отрицательных чисел. Пользователь вводит последовательность целых чисел, завершая ввод 0. Функция должна посчитать количество отрицательных и положительных чисел и вернуть значения счетчиков в главную программу.
Указание 1: Функция не должна возвращать значение (поэтому используется ключевое слово void в объявлении функции). Параметр ref — это параметр ввода-вывода, что означает, что значения параметров будут изменены внутри функции и возвращены в основную программу.
Указание 2: Параметры ref должны быть инициализированы до вызова функции. Поэтому сначала вам необхзодимо инициализировать такие параметры значениями. Установите начальные значения для этих параметров, равные 0:
[Название проекта: Lesson_5Task7, название файла L5Task7.cs]
Пример вывода:
Введите последовательность, завершите ввод 0 2 -4 8 -3 5 0 кол-во отрицательных: 2, количество положительных: 3
ПРИЛОЖЕНИЯ ДЛЯ WINDOWS FORMS
To do: Создайте проект для вычисления факториала числа. Вычисление должно быть оформлено в виде пользовательской функции. Запускать функции следует по щелчку на кнопке Вычислить (btnCalc). Выводить результата следует в текстовое поле (txtFactorial).
[Solution and Project name: Lesson_5Lab5, file name L5Lab5.cs]
Решение:
- Создайте новый проект и самостоятельно разработайте интерфейс новой формы.
- Необходимо создать функцию пользователя. Щёлкните дважды по кнопке. Во открывшемся окне добавьте код перед кодом для кнопки:
- В тело функции необходимо поместить следующий код:
- Теперь, чтобы вычислить значение факториала при нажатии кнопки Вычислить, необходимо запрограммировать событие Click кнопки следующим образом:
- Запустите и отладьте приложение.
- Программа работает, но есть недостаток. Так как наша функция описана с помощью оператора Private, то доступна она будет только из модуля данной формы. Для того чтобы сделать ее доступной для любого модуля нашего приложения, необходимо описать ее в стандартном модуле, исправив Private на Public:
- С помощью меню Project (Проект) и пункта Add Class (Добавить класс) добавьте в Ваш проект стандартный класс, изменив ключевое слово private на public и добавив static.
- В коде для кнопки измените вызов функции на
Class1.Factorial(numb).ToString(). - Запустите и отладьте программу.
TryParse() используется для проверки введенного числа. Если введено действительно число, то результат преобразования в целое число сохранится в переменной numb. При вводе неверного значения выводится сообщение.
Комментариев нет:
Отправить комментарий