Jak mogę utworzyć własne wydarzenie w C #?
122
Oto przykład tworzenia i używania zdarzenia w języku C #
using System;
namespace Event_Example
{
//First we have to define a delegate that acts as a signature for the
//function that is ultimately called when the event is triggered.
//You will notice that the second parameter is of MyEventArgs type.
//This object will contain information about the triggered event.
public delegate void MyEventHandler(object source, MyEventArgs e);
//This is a class which describes the event to the class that recieves it.
//An EventArgs class must always derive from System.EventArgs.
public class MyEventArgs : EventArgs
{
private string EventInfo;
public MyEventArgs(string Text)
{
EventInfo = Text;
}
public string GetInfo()
{
return EventInfo;
}
}
//This next class is the one which contains an event and triggers it
//once an action is performed. For example, lets trigger this event
//once a variable is incremented over a particular value. Notice the
//event uses the MyEventHandler delegate to create a signature
//for the called function.
public class MyClass
{
public event MyEventHandler OnMaximum;
private int i;
private int Maximum = 10;
public int MyValue
{
get
{
return i;
}
set
{
if(value <= Maximum)
{
i = value;
}
else
{
//To make sure we only trigger the event if a handler is present
//we check the event to make sure it's not null.
if(OnMaximum != null)
{
OnMaximum(this, new MyEventArgs("You've entered " +
value.ToString() +
", but the maximum is " +
Maximum.ToString()));
}
}
}
}
}
class Program
{
//This is the actual method that will be assigned to the event handler
//within the above class. This is where we perform an action once the
//event has been triggered.
static void MaximumReached(object source, MyEventArgs e)
{
Console.WriteLine(e.GetInfo());
}
static void Main(string[] args)
{
//Now lets test the event contained in the above class.
MyClass MyObject = new MyClass();
MyObject.OnMaximum += new MyEventHandler(MaximumReached);
for(int x = 0; x <= 15; x++)
{
MyObject.MyValue = x;
}
Console.ReadLine();
}
}
}
event
części dla klasy.Mam pełne omówienie wydarzeń i delegatów w moim artykule o wydarzeniach . W przypadku najprostszego zdarzenia wystarczy zadeklarować zdarzenie publiczne, a kompilator utworzy zarówno zdarzenie, jak i pole do śledzenia subskrybentów:
Jeśli potrzebujesz bardziej skomplikowanej logiki subskrypcji / rezygnacji z subskrypcji, możesz to zrobić jawnie:
źródło
Możesz zadeklarować zdarzenie za pomocą następującego kodu:
W razie potrzeby można użyć niestandardowego typu delegata zamiast EventHandler.
Szczegółowe informacje / samouczki dotyczące korzystania ze zdarzeń w .NET można znaleźć w artykule Samouczek dotyczący zdarzeń (MSDN).
źródło
aby to zrobić, musimy znać trzy składniki
firing the Event
responding to the Event
samo wydarzenie
za. Zdarzenie
b .EventArgs
do. Wyliczenie EventArgs
teraz pozwala stworzyć Event, który jest uruchamiany, gdy wywoływana jest funkcja
ale mam kolejność rozwiązywania tego problemu w następujący sposób: używam klasy, zanim ją utworzę
miejsce, za które odpowiada
responding to the Event
NetLog jest klasą statyczną. Wyjaśnię to później
następny krok to
miejsce, za które odpowiada
firing the Event
trzeci krok
Wypaczyłem The Event w klasie o nazwie NetLog
Ta klasa zawiera teraz
the Event
,EventArgs
aEventArgs Enums
ithe function
odpowiedzialny do wypalania zdarzenieprzepraszam za tak długą odpowiedź
źródło