Содержание:
Теория
Создание универсального метода
- Задание: поменять значениями две переменные. Переменные могут быть различного типа. Универсальный метод — это метод с параметрами любого типа. Определяется метод следующим образом:
- Следующий пример демонстрирует один из способов вызова универсального метода с аргументами типа
int
: - Или более простой способ вызова универсального метода:
, означающее, что вместо него может быть любой тип данных, который будет определен при вызове функции и передаче ей параметра соответствующего типа.static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } |
<T>
означает любой тип данных.
int a = 1; int b = 2; Swap<int>(ref a, ref b); System.Console.WriteLine($"{a} {b}"); |
Swap(ref a, ref b); |
Решение, проект, сборка
- В Visual Studio программа состоит из множества файлов, объединяющихся в проект (
.csproj
— проект). - В начале работы с программой создаётся решение (
.sln
– решение), включающее в себя один проект. Впоследствии к решению можно добавить несколько проектов. - Результатом компиляции проекта является сборка – откомпилированное приложение. В зависимости от его типа это
.exe
-файл (консольное приложение) или.dll
-файл (библиотека классов).
Чтобы добавить новый класс в Visual Studio:
Задания и лабораторные си шарп
Выполнить: Создайте универсальный метод PrintSymbol
для вывода 10 раз введенного символа. Вызовите метод дважды: один раз с целочисленным параметром, второй раз — со строковым параметром.
Указание: Метод PrintSymbol
должен принимать один аргумент — введенный символ (аргумент типа T
(универсальный)); метод не должен возвращать значение (ключевое слово void
).
Пример выполнения:
введите число: 2 результат: 2 2 2 2 2 2 2 2 2 2 введите символ: * результат: * * * * * * * * * *
[Название проекта: Lesson_8Lab1
, название файла L8Lab1.cs
]
✍ Алгоритм:
- Выведите сообщение для пользователя с просьбой ввести символ. Сохраните ввод в целочисленном формате:
- Для вывода символа создайте и объявите новый универсальный метод с названием
PrintSymbol()
(код метода должен быть до функцииMain()
). Для того, чтобы метод был универсальным используйте в качестве типа данных<T>
: - Разместите код для вывода символа. Используйте цикл
for
: - Теперь можно вызвать созданный метод внутри функции
Main
. Введите следующий код в фигурных скобках методаMain()
: - Используйте горячие клавиши
CTRL+F5
, чтобы запустить компиляцию без отладки. - Теперь, вызовем тот же метод, но с аргументов строкового типа. Сначала, объявите переменную строкового типа и инициализируйте ее введенным пользователем значением:
- Запустите приложение и посмотрите на результат. Сохраните приложение.
... Console.WriteLine("введите число"); symbolInt = .Parse(Console.ReadLine()); ...
... static PrintSymbol <T>(T symbol) { ... } ...
... for ( i=0; i < 10; i++) { Console.Write($"{symbol} "); } ...
... PrintSymbol(symbolInt);
... Console.WriteLine("введите символ:"); string symbolStr = Console.ReadLine(); PrintSymbol(symbolStr);
Пояснение: С ростом сложности проекта становится необходимым добавление нового класса к проекту, и разработки методов этого класса. Класс может быть создан в том же самом cs
-файле, после кода основного класса с методом Main
. Вызов методов созданного класса можно выполнять внутри функции Main
.
Выполнить: Добавьте новый класс MyFuncs
в проект. Скопируйте код метода PrintSymbol
и вставьте в код этого класса.
Пример выполнения:
введите число: 2 результат: 2 2 2 2 2 2 2 2 2 2 введите символ: * результат: * * * * * * * * * *
[Название проекта: Lesson_8Lab2
, название файла L8Lab2.cs
]
✍ Алгоритм:
- Откройте предыдущую лабораторную работу (
Lesson_8Lab1
). Скопируйте код методаPrintSymbol
и вставьте его временно в какой-то текстовый файл (на всякий случай). - Создайте новое консольное приложение
Lesson_8Lab2
. Переименуйте файлprogram.cs
вL8Lab2.cs
. - Поместите курсор непосредственно после закрытой фигурной скобки класса
L8Lab2
(на следующей строке). - Поместите код для создания нового класса
MyFuncs
:
class L8Lab2 { static Main(string[] args) { ... } } // ваш код здесь class MyFuncs { }
PrintSymbol
(из временного текстового файла) и вставьте его в код для класса MyFuncs. К методу PrintSymbol
кроме ключевого слова static
, добавьте также ключевое слов public
чтобы сделать метод доступным во всех классах и пространствах имен:... class MyFuncs { public static PrintSymbol<T>(T symbol) { for (var i = 0; i < 10; i++) { Console.Write($"{symbol} "); } } }
Main
): ... Console.WriteLine("введите число"); symbolInt = Int32.Parse(Console.ReadLine()); ...
Main
необходимо обратиться к нему через класс MyFuncs
:... MyFuncs.PrintSymbol(symbolInt); ... |
L8Lab2.cs
в систему moodle.Выполнить: Создайте новый класс MyFuncs
. В созданном классе создайте метод Add()
для сложения двух чисел.
Указание: Метод Add()
должен быть с двумя параметрами. Метод должен возвращать сумму этих двух параметров. Вызовите метод в функции Main
. Заголовок метода должен быть следующим:
public static int Add(int i, int j) |
Примерный результат:
введите два числа 9 8 сумма: 17
[Название проекта: Lesson_8Task1
, название файла L8Task1.cs
Пояснение: С ростом сложности приложения становится необходимостью добавление нового класса для хранения там методов. Новый класс может быть добавлен как новый файл с новым пространством имен.
Выполнить: Откройте решение проекта (Lesson_8Lab2
). Добавьте новый файл-класс MyFuncsLab3
к проекту. Скопируйте туда PrintSymbol()
метод.
Пример выполнения:
введите число: 2 результат: 2 2 2 2 2 2 2 2 2 2 введите символ: * результат: * * * * * * * * * *
[Название проекта: Lesson_8Lab2
, название файла L8Lab3.cs
and myFuncsLab3.cs
]
✍ Алгоритм:
- Откройте лабораторную работу (
Lesson_8Lab2
). Переименуйте основной файл вL8Lab3
. - В окне Solution Explorer (Обозреватель решений) щелкните правой кнопкой на имени проекта -> Add (Добавить) -> Class (Класс). Назовите класс
MyFuncsLab3
. - В окне Обозреватель решений должен появиться файл
MyFuncsLabs.cs
. - Скопируйте туда метод
PrintSymbol()
( в класс MyFuncsLab3 файлаMyFuncsLab3.cs
). Ключевое словоstatic
больше не нужно, пригодится толькоpublic
:
class MyFuncsLab3 { public PrintSymbol <T>(T symbol) { for (var i = 0; i < 10; i++) { Console.Write($"{symbol} "); } } }
L8Lab3.cs
, чтобы открыть код этого файла.
PrintSymbol
, необходимо открыть функцию Main и добавить MyFunctsLab3
через точечную нотацию:... MyFunctsLab3.PrintSymbol(symbolInt); ... |
L8Lab3.cs
иMyFuncsLab3.cs
в moodle.Выполнить: Дан массив целых чисел (10 элементов, сгенерированных случайно в диапазоне от -10 до10). Необходимо найти и вывести четные элементы массива, а также их индексы. Также вывести общее количество четных чисел. Все методы должны быть размещены в классе L8MyFunctions
.
Указание 1: Добавьте новый класс L8MyFunctions
(новый файл-класс).
Указание 2: Создайте метод FillRandomArray()
для заполнения массива случайными числами.
Указание 3: Создайте метод Print
для вывода элементов массива.
Указание 4: Создайте метод FindEven()
для нахождения и вывода четных элементов массива. Метод должен принимать параметр arr
(массив) и возвращать значение параметра counter
(out
параметр). Сигнатура функции должны быть следующей:
public void FindEven(int[] arr, out int counter) { } |
Примерный результат:
Массив: 9 8 -10 8 -1 6 2 -9 8 7 четный элементы: 8, index: 1 -10, index: 2 8, index: 3 6, index: 5 2, index: 6 8, index: 8 количество четных: 6
[Название проекта: Lesson_8Task2
, название файла L8Task2.cs
, L8MyFunctions.cs
]