🗊Презентация События и делегаты

Нажмите для полного просмотра!
События и делегаты, слайд №1События и делегаты, слайд №2События и делегаты, слайд №3События и делегаты, слайд №4События и делегаты, слайд №5События и делегаты, слайд №6События и делегаты, слайд №7События и делегаты, слайд №8События и делегаты, слайд №9События и делегаты, слайд №10События и делегаты, слайд №11События и делегаты, слайд №12События и делегаты, слайд №13События и делегаты, слайд №14События и делегаты, слайд №15

Вы можете ознакомиться и скачать презентацию на тему События и делегаты. Доклад-сообщение содержит 15 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





События и делегаты
Делегаты
Описание слайда:
События и делегаты Делегаты

Слайд 2





Определение делегата 
Делегат — это вид класса, предназначенный для хранения ссылок на методы. Делегат, как и любой другой класс, можно передать в качестве параметра, а затем вызвать инкапсулированный в нем метод. 
Делегаты используются для поддержки событий, а также как самостоятельная конструкция языка. 
Описание делегата задает сигнатуру методов, которые могут быть вызваны с его помощью:
[ атрибуты ] [ спецификаторы ] delegate тип имя([ параметры ])
Пример описания делегата:
public delegate void D ( int i );
Базовым классом делегата является класс System.Delegate
Описание слайда:
Определение делегата Делегат — это вид класса, предназначенный для хранения ссылок на методы. Делегат, как и любой другой класс, можно передать в качестве параметра, а затем вызвать инкапсулированный в нем метод. Делегаты используются для поддержки событий, а также как самостоятельная конструкция языка. Описание делегата задает сигнатуру методов, которые могут быть вызваны с его помощью: [ атрибуты ] [ спецификаторы ] delegate тип имя([ параметры ]) Пример описания делегата: public delegate void D ( int i ); Базовым классом делегата является класс System.Delegate

Слайд 3





Использование делегатов 
Делегаты применяются в основном для следующих целей:
получения возможности определять вызываемый метод не при компиляции, а динамически во время выполнения программы;
обеспечения связи между объектами по типу «источник — наблюдатель»;
создания универсальных методов, в которые можно передавать другие методы (поддержки механизма обратных вызовов).
Описание слайда:
Использование делегатов Делегаты применяются в основном для следующих целей: получения возможности определять вызываемый метод не при компиляции, а динамически во время выполнения программы; обеспечения связи между объектами по типу «источник — наблюдатель»; создания универсальных методов, в которые можно передавать другие методы (поддержки механизма обратных вызовов).

Слайд 4





Обратный вызов (callback)
Описание слайда:
Обратный вызов (callback)

Слайд 5





Передача делегата через список параметров 
namespace ConsoleApplication1 {
    public delegate double Fun( double x );      // объявление делегата
    class Class1 {
        public static void Table( Fun F, double x, double b )
        {   Console.WriteLine( " ----- X ----- Y -----" );
            while (x <= b)
            {  Console.WriteLine( "| {0,8} | {1,8} |", x, F(x));
               x += 1; }
        }
        public static double Simple( double x ) { return 1; }
        static void Main()
        { Table( Simple, 0, 3 ); 
           Table( Math.Sin, -2, 2 );                    // new Fun(Math.Sin)
           Table( delegate (double x ){ return 1; }, 0, 3 );
}}}
Описание слайда:
Передача делегата через список параметров namespace ConsoleApplication1 { public delegate double Fun( double x ); // объявление делегата class Class1 { public static void Table( Fun F, double x, double b ) { Console.WriteLine( " ----- X ----- Y -----" ); while (x <= b) { Console.WriteLine( "| {0,8} | {1,8} |", x, F(x)); x += 1; } } public static double Simple( double x ) { return 1; } static void Main() { Table( Simple, 0, 3 ); Table( Math.Sin, -2, 2 ); // new Fun(Math.Sin) Table( delegate (double x ){ return 1; }, 0, 3 ); }}}

Слайд 6





Операции 
Делегаты можно сравнивать на равенство и неравенство. Два делегата равны, если они оба не содержат ссылок на методы или если они содержат ссылки на одни и те же методы в одном и том же порядке.
С делегатами одного типа можно выполнять операции простого и сложного присваивания.
Делегат, как и строка string, является неизменяемым типом данных, поэтому при любом изменении создается новый экземпляр, а старый впоследствии удаляется сборщиком мусора.
Использование делегата имеет тот же синтаксис, что и вызов метода. Если делегат хранит ссылки на несколько методов, они вызываются последовательно в том порядке, в котором были добавлены в делегат.
Описание слайда:
Операции Делегаты можно сравнивать на равенство и неравенство. Два делегата равны, если они оба не содержат ссылок на методы или если они содержат ссылки на одни и те же методы в одном и том же порядке. С делегатами одного типа можно выполнять операции простого и сложного присваивания. Делегат, как и строка string, является неизменяемым типом данных, поэтому при любом изменении создается новый экземпляр, а старый впоследствии удаляется сборщиком мусора. Использование делегата имеет тот же синтаксис, что и вызов метода. Если делегат хранит ссылки на несколько методов, они вызываются последовательно в том порядке, в котором были добавлены в делегат.

Слайд 7






События
Описание слайда:
События

Слайд 8





Определение события
Событие — элемент класса, позволяющий ему посылать другим объектам (наблюдателям) уведомления об изменении своего состояния. 
Чтобы стать наблюдателем, объект должен иметь обработчик события и зарегистрировать его в объекте-источнике
Описание слайда:
Определение события Событие — элемент класса, позволяющий ему посылать другим объектам (наблюдателям) уведомления об изменении своего состояния. Чтобы стать наблюдателем, объект должен иметь обработчик события и зарегистрировать его в объекте-источнике

Слайд 9





Пример
class Subj  {           // -------------- Класс-источник события ---------------------
        public event EventHandler Oops;     // Описание события станд. типа
        public void CryOops() {                  // Метод, инициирующий событие
               Console.WriteLine( "OOPS!" );  if ( Oops != null ) Oops( this, null ); }
    }
class Obs     {        // --------------- Класс-наблюдатель --------------------------
        public void OnOops( object sender, EventArgs e ) {   // Обработчик соб-я
                Console.WriteLine( «Оййй!" );
        }
    }
class Class1 {
        static void Main()         {
            Subj s  = new Subj();
            Obs o1 = new Obs();  Obs o2 = new Obs();
            s.Oops += o1.OnOops;                              // регистрация обработчика
            s.Oops += o2.OnOops;                              // регистрация обработчика
            s.CryOops();
        }
    }
Описание слайда:
Пример class Subj { // -------------- Класс-источник события --------------------- public event EventHandler Oops; // Описание события станд. типа public void CryOops() { // Метод, инициирующий событие Console.WriteLine( "OOPS!" ); if ( Oops != null ) Oops( this, null ); } } class Obs { // --------------- Класс-наблюдатель -------------------------- public void OnOops( object sender, EventArgs e ) { // Обработчик соб-я Console.WriteLine( «Оййй!" ); } } class Class1 { static void Main() { Subj s = new Subj(); Obs o1 = new Obs(); Obs o2 = new Obs(); s.Oops += o1.OnOops; // регистрация обработчика s.Oops += o2.OnOops; // регистрация обработчика s.CryOops(); } }

Слайд 10





Механизм событий
События построены на основе делегатов: с помощью делегатов вызываются методы-обработчики событий. Поэтому создание события в классе состоит из следующих частей:
описание делегата, задающего сигнатуру обработчиков событий;
описание события;
описание метода (методов), инициирующих событие.
Синтаксис события:
[ атрибуты ] [ спецификаторы ] event тип имя
Описание слайда:
Механизм событий События построены на основе делегатов: с помощью делегатов вызываются методы-обработчики событий. Поэтому создание события в классе состоит из следующих частей: описание делегата, задающего сигнатуру обработчиков событий; описание события; описание метода (методов), инициирующих событие. Синтаксис события: [ атрибуты ] [ спецификаторы ] event тип имя

Слайд 11





Пример 
public delegate void Del( object o );     // объявление делегата
class A
{
    public event Del Oops;                      // объявление события
    ...
}
Описание слайда:
Пример public delegate void Del( object o ); // объявление делегата class A { public event Del Oops; // объявление события ... }

Слайд 12






Обработка событий выполняется в классах-получателях сообщения. Для этого в них описываются методы-обработчики событий, сигнатура которых соответствует типу делегата. Каждый объект (не класс!), желающий получать сообщение, должен зарегистрировать в объекте-отправителе этот метод.
Событие — это удобная абстракция для программиста. На самом деле оно состоит из закрытого статического класса, в котором создается экземпляр делегата, и двух методов, предназначенных для добавления и удаления обработчика из списка этого делегата.
Внешний код может работать с событиями единственным образом: добавлять обработчики в список или удалять их, поскольку вне класса могут использоваться только операции += и -=. Тип результата этих операций — void, в отличие от операций сложного присваивания для арифметических типов. Иного способа доступа к списку обработчиков нет.
Описание слайда:
Обработка событий выполняется в классах-получателях сообщения. Для этого в них описываются методы-обработчики событий, сигнатура которых соответствует типу делегата. Каждый объект (не класс!), желающий получать сообщение, должен зарегистрировать в объекте-отправителе этот метод. Событие — это удобная абстракция для программиста. На самом деле оно состоит из закрытого статического класса, в котором создается экземпляр делегата, и двух методов, предназначенных для добавления и удаления обработчика из списка этого делегата. Внешний код может работать с событиями единственным образом: добавлять обработчики в список или удалять их, поскольку вне класса могут использоваться только операции += и -=. Тип результата этих операций — void, в отличие от операций сложного присваивания для арифметических типов. Иного способа доступа к списку обработчиков нет.

Слайд 13





Пример
public delegate void Del();                       // объявление делегата
    class Subj                                             // класс-источник
    {  public event Del Oops;                         // объявление события
        public void CryOops()              // метод, инициирующий событие
        {   Console.WriteLine( "OOPS!" ); if ( Oops != null ) Oops();      }
    }
    class ObsA                                          // класс-наблюдатель
    {
        public void Do();                    // реакция на событие источника
        {  Console.WriteLine( "Вижу, что OOPS!" );  }
    }
    class ObsB                                          // класс-наблюдатель
    {
        public static void See()             // реакция на событие источника
        {  Console.WriteLine( "Я тоже вижу, что OOPS!" );   }
    }
Описание слайда:
Пример public delegate void Del(); // объявление делегата class Subj // класс-источник { public event Del Oops; // объявление события public void CryOops() // метод, инициирующий событие { Console.WriteLine( "OOPS!" ); if ( Oops != null ) Oops(); } } class ObsA // класс-наблюдатель { public void Do(); // реакция на событие источника { Console.WriteLine( "Вижу, что OOPS!" ); } } class ObsB // класс-наблюдатель { public static void See() // реакция на событие источника { Console.WriteLine( "Я тоже вижу, что OOPS!" ); } }

Слайд 14






class Class1
    {
        static void Main()
        {
            Subj s  = new Subj();              //    объект класса-источника
            ObsA o1 = new ObsA();              //  объекты
            ObsA o2 = new ObsA();              //  класса-наблюдателя
            s.Oops += new Del( o1.Do );        //               добавление
            s.Oops += new Del( o2.Do );        //               обработчиков
            s.Oops += new Del( ObsB.See );     //             к событию
            s.CryOops();                       //      инициирование события 
        }
    }
Описание слайда:
class Class1 { static void Main() { Subj s = new Subj(); // объект класса-источника ObsA o1 = new ObsA(); // объекты ObsA o2 = new ObsA(); // класса-наблюдателя s.Oops += new Del( o1.Do ); // добавление s.Oops += new Del( o2.Do ); // обработчиков s.Oops += new Del( ObsB.See ); // к событию s.CryOops(); // инициирование события } }

Слайд 15





Еще немного про делегаты и события
Делегат можно вызвать асинхронно (в отдельном потоке), при этом в исходном потоке можно продолжать вычисления.
Анонимный делегат (без создания класса-наблюдателя):
  s.Oops += delegate ( object sender, EventArgs e ) 
                      { Console.WriteLine( "Я с вами!" ); }; 
Делегаты и события обеспечивают гибкое взаимодействие взаимосвязанных объектов, позволяющее поддерживать их согласованное состояние.
События включены во многие стандартные классы .NET, например, в классы пространства имен Windows.Forms, используемые для разработки Windows-приложений.
Описание слайда:
Еще немного про делегаты и события Делегат можно вызвать асинхронно (в отдельном потоке), при этом в исходном потоке можно продолжать вычисления. Анонимный делегат (без создания класса-наблюдателя): s.Oops += delegate ( object sender, EventArgs e ) { Console.WriteLine( "Я с вами!" ); }; Делегаты и события обеспечивают гибкое взаимодействие взаимосвязанных объектов, позволяющее поддерживать их согласованное состояние. События включены во многие стандартные классы .NET, например, в классы пространства имен Windows.Forms, используемые для разработки Windows-приложений.



Похожие презентации
Mypresentation.ru
Загрузить презентацию