Содержание:
Теория
Создание универсального метода
- Задание: поменять значениями две переменные. Переменные могут быть различного типа. Универсальный метод — это метод с параметрами любого типа. Определяется метод следующим образом:
- Следующий пример демонстрирует один из способов вызова универсального метода с аргументами типа
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]