рпрпр. Это переменная для типа переменных. Создать переменную(шаблон) и под это имя подставить тип данных
Скачать 20.56 Kb.
|
Обобщения или шаблоны Это переменная для типа переменных. Создать переменную(шаблон) и под это имя подставить тип данных. Пример магазин спортивных товаров internal class Eating where T: Product { public int Volume { get; private set; } public void Add(T product) { Volume += product.Volume * product.Energy; } var apple = new Apple("Apple", 2, 3); var eating = new Eating eating.Add(apple); Интерфейсы Интерфейс можно считать своеобразным договором между системой и внешним окружением. Описание Способов взаимодействия. В рамках компьютерной программы «система» — рассматриваемая функция или модуль, а «окружение» — весь остальной проект. Интерфейс формально описывает, какие данные могут передаваться между системой и окружением. Не позволяет объявлять что то закрытое Не наследуются, а реализуются(имплементация) Множественная реализация internal interface ICar { int Move(int distance); } internal class LadaSeven : ICar { public int Move(int distance) { return distance / 40; } internal class BMW : ICar { public int Move(int distance) { return distance / 100; } } internal interface IPerson { int Move(int distance); } internal class Cyborg : ICar, IPerson { int ICar.Move(int distance) { return distance / 100; } int IPerson.Move(int distance) { return distance / 5; } } static void Main(string[] args) { var cars = new List cars.Add(new LadaSeven()); cars.Add(new BMW()); foreach(var car in cars) { Console.WriteLine(car.Move(200)); } Cyborg cyborg = new Cyborg(); Console.WriteLine(((ICar)cyborg).Move(300)); Console.WriteLine(((IPerson)cyborg).Move(300)); Console.ReadKey(); } Последовательное наследование internal interface ICar : IObject { int Move(int distance); } // домашнеее задание // определить интерфейс, содержащей методы и свойства Определить интерфейс наследник от первого интерфейса (еще методы) Реализовать второй интерфейс Исключения Try { } Catch(тип исключения исключение) when I ==5 { } Finally { } Throw – кинули исключение дальше Собственные исключения internal class MyOwnException : Exception { public MyOwnException() : base("Майот исключение") { } public MyOwnException(string message) : base(message) { } Делегаты и события Делегат – указатель на метод Сигнатуры – тип и кол-во аргумента. Должны совпадать public delegate тип_возвращаемого_значения имя_делегата(тип аргумента аргумент) MyDeligate myDeligate = Method1; myDeligate += Method4; шаблоные делегаты: Action action – делегат void не принимающий аргументов Action Predicate Fanc <типы…,тип возвращаемого значения> эквивалентно public delegate int Func(string) !! проверять делегат на null !! Func?.Invoke() События public event Action GoToSleep; public void TakeTime(DateTime now) { if(now.Hour <= 8) { GoToSleep?.Invoke(); } Person person = new Person(); person.GoToSleep += Person_GoToSleep; private static void Person_Dowork(object sender, EventArgs e) { if(sender is Person) { Console.WriteLine($"{((Person)sender).Name} работает работу"); } <КлассИлиОбъект>.<ИмяСобытия> += <КлассЧейМетодДолженЗапуститься>.<МетодПодходящийПоСигнатуре>. ----------------------------------------------------------------------------------------------------------------------------- Потоки и файлы Using – создает объект который доступен только внутри этого блока, после выполнения будет уничтожен Перезаписывается using (var sw = new StreamWriter("C:\\Users\\smokeatvck\\Desktop\\localhostApi\\Al1.txt")) { sw.Write("Hello,World"); sw.WriteLine("Huesos and Pidaras hueglot"); } Дописывается using (var sw = new StreamWriter("C:\\Users\\smokeatvck\\Desktop\\localhostApi\\Al1.txt", true)) Кодировка using (var sw = new StreamWriter("C:\\Users\\smokeatvck\\Desktop\\localhostApi\\Al1.txt",true, Encoding.UTF8)) Читать файл построчно While(!sr.EndToStream) Домашняя работа: приложение которое запрашивает данные пользователя :: введите еду калорийность сколько съели. Приложение зааписывает введенные данные в файл. По определенной команде читает данные из файла. ----------------------------------------------------------------------------------------------------------------------------- Асинхронность и многопоточность Конкурентность – борьба за ресурсы Асинхронность набор потоков ,которые берутся в аренду, держатся в приостановленном состоянии Многопоточность Thread thread = new Thread(new ThreadStart(DoWork)); Thread thread1 = new Thread(new ParameterizedThreadStart(DoWork2)); - если метод с параметрами типа object По умолчанию все создаваемые потоки в C# имеют стандартный приоритет Normal. Однако приоритеты потоков можно и менять, делается это так: имяпотока.Priority = ThreadPriority.вариантприоритета; Асинхронность async Task DoWorkAsync() { await Task.Run(() =>DoWork()); Console.WriteLine("DoWorkAsync"); } Await – ждем выполнения потока Участок кода для одного потока: public static object locker = new object(); lock(locker) { } Домашнее задание: создать метод со сложными вычислениями async Создать thread с повышенным приоритетом Использовать lock |