Как использовать существующее событие в C #? - PullRequest
0 голосов
/ 29 декабря 2011

Я работаю над проблемой, которая касается делегата и события. Я новичок в этом аспекте. Я не знаю, как назвать это событие.

Кто-нибудь скажет мне? Заранее спасибо.

Ответы [ 5 ]

1 голос
/ 29 декабря 2011

Событие может быть вызвано в классе, в котором оно объявлено. Сначала вы обычно хотите проверить, является ли ваше событие пустым.

if (MyEvent != null) MyEvent(this, new EventArgs());

Аргументы, которые вы передаете событию, будут зависеть от объявления события. Чтобы дать вам немного больше информации, событие - это просто трюк с компилятором. Когда такое событие, как

public event ChangedEventHandler Changed;

скомпилировано это будет выглядеть как

protected ChangedEventHandler _change;
public ChangedEventHandler Change
{
    add { _change += value; }
    remove { _change -= value; }
}

, поэтому все, что внутри объявлено, будет использовать _change, а все, что снаружи будет использовать Change. Другими словами, внутри, где он объявлен, это просто делегат, и применяются все нормальные правила.

1 голос
/ 29 декабря 2011

Вот простой пример вызова события ....

// event_keyword.cs
using System;
public delegate void MyDelegate();   // delegate declaration

public interface I 
{
   event MyDelegate MyEvent;
   void FireAway();
}

public class MyClass: I 
{
   public event MyDelegate MyEvent;

   public void FireAway() 
   {
      if (MyEvent != null)
         MyEvent();
   }
}

public class MainClass 
{
   static private void f() 
   {
      Console.WriteLine("This is called when the event fires.");
   }

   static public void Main () 
   {
      I i = new MyClass();

      i.MyEvent += new MyDelegate(f);
      i.FireAway();
   }
}

Существует Ссылка , которая может быть полезной.

0 голосов
/ 29 декабря 2011

При использовании события вы сначала должны объявить его:

// Create some custom arguments for the event
public class SampleEventArgs
{
    public SampleEventArgs(string s) 
    { 
        Text = s; 
    }
    public String Text {get; private set;} 
}

// Define a class that uses the event
public class EventPublisher
{
    // Declare the delegate 
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event by using the () operator.
        if (SampleEvent != null)
            SampleEvent(this, new SampleEventArgs("Hello"));
    }
}

Затем вы можете подписаться на событие:

 EventPublisher publisher = new EventPublisher();
            publisher.SampleEvent += new EventPublisher.SampleEventHandler(SampleEventHandler);

public void SampleEventHandler(object sender, SampleEventArgs args)
        {

        }

Ваш обработчик события будет вызываться при EventPublisherвыполняет RaiseSampleEvent()

0 голосов
/ 29 декабря 2011

Как только вы определили делегата, вам нужно определить, когда вызывать событие.Я имею в виду, что вы можете вызвать событие при присвоении любого значения определенной переменной.

здесь приведен пример определения делегата с тем же классом переменной.

public class callbackdel : EventArgs
{
    public readonly string resp = null;

    public callbackdel(string s)
    {
        resp = s;
    }
}    

public delegate void WorkerEndHandler(object o, callbackdel e);

Теперь в используемом элементе управления необходимо добавить этот метод.

public void OnWorkEnd(object o, callbackdel e)
{
        WorkEnd(o, e);
}

после создания метода и определения делегата вы можете вызвать событие из любого делегата, просто вызвав метод.

OnWorkEnd((object)this, e);
0 голосов
/ 29 декабря 2011

Чтобы повторно использовать событие, вам просто нужно прикрепить событие, например, с помощью элемента управления вами.

buttonone.Click+= event1;
buttonTwo.Click+= event1;

Более подробно смотрите: C # Основы реализации событий, лучшие практики и соглашения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...