Как сгенерировать собственное событие напрямую, безо всяких посредников - C#

Узнай цену своей работы

Формулировка задачи:

using System;
delegate void MyEventHandler();
 
class Ping
{
    public event MyEventHandler SomeEvent;
    // Этот метод вызывается для запуска события, 

    public void OnSomeEvent()
    {
        if (SomeEvent != null)
            SomeEvent();
    }
}
 
/// <summary>
/// /////////////////////////////////////////////////////////
/// </summary>
 
class EventDemo
{
    // Обработчик события, 
    static void Handler()
    {
        Console.WriteLine("Произошло событие");
    }
    static void Main()
    {
        Ping pi = new Ping();
        pi.SomeEvent += Handler;
        pi.OnSomeEvent();
        
        //Вот так вот как написать?
        pi.SomeEvent();
    }
}
Значит, чем я недоволен: Чтобы вызвать событие нужно использовать посредника OnSomeEvent(); теперь скажите, нам мало посредников, что ещё один необходим?
public event MyEventHandler SomeEvent;public event (void* ()) SomeEvent;
А здесь-то что? На ровном месте добавили функцию- обёртку для генерации исключения. Вопрос архиважный на самом деле. Дело в том, что иногда нужно напрямую генерить исключение, если функция, подобная OnSomeEvent(); просто-напросто отсутствует. Вот моя же тема: (хоть C++, но суть-то одна) Как сгенерировать событие клика в TextBox Там идёт речь о генерации исключения OnClick(e) на какой-то там форме, щас не вспомнить; Так вот, исключение-то есть, а функции подобной OnSomeEvent(); нет, а сгенерировать надо. Вот и приплыли. Если я научусь генерировать исключение напрямую в собственном классе, то то же самое смогу сделать и в других. Спасибо, кто откликнется.

Решение задачи: «Как сгенерировать собственное событие напрямую, безо всяких посредников»

textual
Листинг программы
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
/*
Реализовать набор классов, реализующих стандартные интерфейсы по работе с коллекциями из пространства имен System.Collections.
Интерфейсы:
    IEnumerable (последовательность элементов)
    ICollection (коллекция)
    IList (список)
    IDictinary (словарь)
Классы:
    List (список)
    Queue (очередь)
    Dictinary (словарь)
*/
 
 
namespace DotNETIKLab4
{
    class Program
    {
        static void Main(string[] args)
        {
//--------------------------------LIST------------------------------------//
            MyList L = new MyList();
          //L.CriticalValueObjects += ShowMsg;//Это Ваш посредник
            L.CriticalValueObjects += delegate(string message)//Это напрямую обрабтчик
            {
                System.Console.WriteLine(message);
            };
            for (var i = 1; i <= 11; i++)
            {
                L.Add(i);
                L.PrintAll();
            }
 
            MyDictionary D = new MyDictionary();
            for (int i = 0; i <= 8;i++)
                D.Add("Строка "+Convert.ToString(i+1), i+1);
            D.PrintAll();
        }
        static void ShowMsg(string message)
        {
           System.Console.WriteLine(message);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы