// , class MyEvent {
MyEventHandler[] evnt = new MyEventHandler[3];
public event MyEventHandler SomeEvent {
// , add { int i;
for(i=0; i < 3; i++) if(evnt[i] == null) { evnt[i] = value; break;
}
if (i == 3) Console.WriteLine(" .");
}
// , remove { int i;
for(i=0; i < 3; i++) if(evnt[i] == value) { evnt[i] = null; break;
}
if (i == 3) Console.WriteLine(" .");
}
}
// . , public void OnSomeEvent() {
for(int i=0; i < 3; i++)
if(evnt[i]!= null) evnt[i]();
}
}
// , MyEventHandler. class W {
public void Whandler() {
Console.WriteLine(" W");
}
}
class X {
public void Xhandler() {
Console.WriteLine(" X");
}
}
class Y {
public void Yhandler() {
Console.WriteLine(" Y");
class Z {
public void Zhandler() {
Console.WriteLine(" Z");
}
}
class EventDemo5 { static void Main() {
MyEvent evt = new MyEvent();
// .
Console.WriteLine(" ."); evt.SomeEvent += wOb.Whandler; evt.SomeEvent += xOb.Xhandler; evt.SomeEvent += yOb.Yhandler;
// - , evt.SomeEvent += zOb.Zhandler;
Console.WriteLine();
// , evt.OnSomeEvent();
Console.WriteLine();
// .
Console.WriteLine(" xOb.Xhandler."); evt.SomeEvent -= xOb.Xhandler; evt.OnSomeEvent();
Console.WriteLine();
// .
Console.WriteLine(" " +
"xOb.Xhandler ."); evt.SomeEvent -= xOb.Xhandler; evt.OnSomeEvent();
Console.WriteLine();
// Zhandler.
Console.WriteLine(" zOb.Zhandler."); evt.SomeEvent += zOb.Zhandler; evt.OnSomeEvent();
}
}
.
.
W X Y
xOb.Xhandler.
W Y
xOb.Xhandler .
.
W Y
zOb.Zhandler.
W X Y
. MyEventHandler. MyEvent. evnt, .
|
|
MyEventHandler[] evnt = new MyEventHandler[3];
, . evnt (null).
SomeEvent. event.
public event MyEventHandler SomeEvent {
// , add { int i;
for(i=0; i < 3; i++) if(evnt[i] == null) { evnt[i] = value; break;
}
if (i == 3) Console.WriteLine(" .");
}
// , remove { int i; for(i=0; i < 3; i++) if(evnt[i] == value) { evnt[i] = null; break;
}
, add, (.. ) evnt , value. , . (, .) evnt , . , remove evnt , value. , (null), , .