namespace Observer
{
//defines a delegate that defines the signature of the Observer method, which is a protocol bar
public delegate void Numbereventhandler ( Object Sender,numbereventargs e);
//What parameters are passed to the observer? In this definition, note that you want to inherit from EventArgs
public class Numbereventargs:eventargs
{
Public numbereventargs (int number)
{ _number = number;
}
Private int _number;
public int number
{
get {_number;}
Set {_number = value;}
}
}
//Subject in Observer Mode
public class Subject
{
//define an event, which is the instance of the delegate
public event Numbereventhandler Nu mberreached;
public void Dowithloop (int number)
{
for (int i = 0; I <= i++)
{
//trigger event conditions to
if ( i = = Number
{
Numbereventargs e = new Numbereventargs (i);
Onnumberreached (e);
}
}
}
//Note that this method is defined as protected, virtual, and can be overridden on behalf of subclasses, altering the behavior of triggering events
//Can not even trigger events protected virtual void Onnumberreach Ed (Numbereventargs e)
{
//To determine whether the event is null, that is, whether the method is bound to
if (numberreached!= null) NumbErreached (this, e);
}
}
public class Mainprogram
{
public static void Main ()
{
Console.WriteLine ("Please Input a 0-100 number: ");
int input = Console.read ();
if (Input < 0 | | | input >) {Console.WriteLine ("Error");}
Subject s = new Subject ();
//To the event binding method, static
S.numberreached + = new Numbereventhandler (msgbox_numberreached);
Mainprogram MP = new Mainprogram ();
//To the event binding method, instance method
S.numberreached + = new Numbereventhandler (mp.console_numberreached);
S.dowithloop (input); Console.read ();
}
void Console_numberreached (object sender, Numbereventargs e)
{
Console.WriteLine (e.number.tostring ( ));
}
static void Msgbox_numberreached (object sender, Numbereventargs e)
{
MessageBox.Show (e.number.tost Ring ());
}
}
}