Главная страница
Навигация по странице:

  • Делегаты и события Делегат – указатель на метод

  • . += .

  • Normal

  • рпрпр. Это переменная для типа переменных. Создать переменную(шаблон) и под это имя подставить тип данных


    Скачать 20.56 Kb.
    НазваниеЭто переменная для типа переменных. Создать переменную(шаблон) и под это имя подставить тип данных
    Анкоррпрпр
    Дата10.10.2022
    Размер20.56 Kb.
    Формат файлаdocx
    Имя файлаc#.docx
    ТипДокументы
    #725279

    Обобщения или шаблоны

    Это переменная для типа переменных. Создать переменную(шаблон) и под это имя подставить тип данных.

    Пример магазин спортивных товаров

    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 action = Method – void

    Predicate predicate эквивалентно public delegate bool Predicate(int)

    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


    написать администратору сайта