(1)创建C# 控制台应用程序L4_4。
(2)新建一个表示太阳的类Sun,在其中定义一个事件OnRise,一个成员方法Rise,并在方法中引发。参考源代码如下 (太阳只有一个,所以将其定义为静态类,静态类中只能定义静态成员) :
public static class Sun
{
public static event EventHandler OnRise; //定义了一个事件成员OnRise
public static void Rise() //引发事件的函数成员
{
Console.WriteLine("太阳从东方升起...");
if (OnRise != null)
OnRise(null, null); //引发事件OnRise
}
}
(3)在程序中新建一个公鸡类Cock,在其中定义:
私有字段_name;
针对Sun.OnRise事件的处理方法Sun_OnRise;
事件OnSing;
引发事件OnSing的方法Sing。
构造函数,初始化私有字段_name,并将事件处理方法与事件进行关联。
参考源代码如下:
public class Cock
{
private string _name; //私有字段,用于存放Cock实例的名称
public Cock(string name) //构造函数,初始化字段,并将事件关联至处理方法
{
_name = name;
Sun.OnRise += new EventHandler(Sun_OnRise);
}
//定义Sun.OnRise事件的处理方法
private void Sun_OnRise(object sender, EventArgs e)
{
Console.WriteLine("公鸡{0}:", _name);
Console.WriteLine("雄鸡一声天下白!");
this.Sing(); //调用Sing方法以引发自身的事件OnSing
}
public event EventHandler OnSing; //Cock类的事件成员
public void Sing() //引发OnSing事件的方法
{
Console.WriteLine("喔喔喔...");
if (OnSing != null)
OnSing(this, null);
}
}
(4)在程序中新建一个主人类Host,在其中同样定义:
私有字段_name;
起床事件OnGetup;
起床方法Getup(引发起床事件的成员);
养鸡方法Foster,在该方法中将事件OnSing与事件处理方法c1_OnSing相关联;
Cock.OnSing事件的处理方法c1_OnSing。
参考源代码如下:(c1_OnSing方法中调用Getup方法,表示公鸡打鸣会使主人起床)
public class Host
{
private string _name;
public Host(string name)
{
_name = name;
}
public event EventHandler OnGetup; //Host类的事件成员
public void Getup()
{
Console.WriteLine("日出而作...");
if (OnGetup != null)
OnGetup(this, null);
}
public void Foster(Cock c1)
{
c1.OnSing += new EventHandler(c1_OnSing);
}
private void c1_OnSing(object sender, EventArgs e)
{
Console.Wri
1