C#——事件(Event)DEMO[闻鸡起舞]
問題描述?
(1)?創建?C#控制臺應用程序。?
(2)?在程序中新建一個表示太陽的類Sun,在其中定義一個事件OnRise,一個成員方法Rise,并在方法中引發事件。參考源代碼如下(太陽只有一個,所以將其定義為靜態類)?:?
public?static?class?Sun?{public?static?event?EventHandler?OnRise;public?static?void?Rise()?{Console.WriteLine("太陽從東方升起!");?if?(OnRise?!=?null)OnRise(null,?null);}}(3)?在程序中新建一個公雞類?Cock?,在其中定義私有字段?_name?,針對?Sun.OnRise?事件的處理方法?Sun_OnRise,事件?OnSing,以及引發該事件的方法?Sing;在類的構造函數中初始化字段,并將事件處理方法與事件相關聯。
參考源代碼如下(Sun_OnRise?方法中調用了?Sing?方法,表示太陽升起會使公雞打鳴)?:?
public class Cock{private string _name;public Cock(string name){_name = name;Sun.OnRise += new EventHandler(Sun_OnRise);}private void Sun_OnRise(object sender, EventArgs e){Console.WriteLine("公雞{0}:", _name);Console.WriteLine("雄雞一聲天下白!");this.Sing();}public event EventHandler OnSing;public void Sing(){Console.WriteLine("喔喔喔……");if (OnSing != null)OnSing(this, null);}}(4)?在程序中新建一個主人類?Host,在其中同樣定義字段_name,起床事件?OnGetup?,起床方法?Getup?(引發起床事件)?,養雞方法?Foster?,以及?Cock.OnSing?事件的處理方法?c1_OnSing,并在?Foster?方法中與事件相關聯。
參考源代碼如下(c1_OnSing?方法中調用了?Getup?方法,表示公雞打鳴會使主人起床)?:
public class Host{private string _name;public Host(string name) { _name = name; }public event EventHandler OnGetup;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.WriteLine("主人{0}:", _name);Console.WriteLine("聞雞起舞!");this.Getup();}}(5)?參照?Cock?類和?Host?類中的代碼,新建狗類?Dog?和貓類?Cat,在其中定義字段?_owner?以記錄其主人對象,定義?owner_OnGetup?方法以處理?Host.OnGetup?事件(主人起床時,輸出狗叫聲"汪汪"和貓叫聲"喵喵";)通過屬性?Owner?封裝字段_owner,并在其?set?訪問函數中關聯事件和事件處理方法。?
(6)?在程序主方法中依次創建雞、主人、狗、貓對象,而后調用?Sun.Rise?方法,參考源代碼如下:
public class Program {static void Main(){//編譯運行程序,看看"太陽升起"這一事件會引發怎樣的連鎖反應。Cock cock1 = new Cock("花花");Host host1 = new Host("祖逖");host1.Foster(cock1);Dog dog1 = new Dog("旺財");dog1.Owner = host1;Cat cat1 = new Cat("咪咪");cat1.Owner = host1; Sun.Rise();}}(7)?編譯運行程序,看看"太陽升起"這一事件會引發怎樣的連鎖反應。
解決方案?
using System;namespace Homework3 {/* 在程序中新建一個表示太陽的類Sun,在其中定義一個事件OnRise,一個成員方法Rise,并在方法中引發事件。* 參考源代碼如下(太陽只有一個,所以將其定義為靜態類) : */public static class Sun{public static event EventHandler OnRise;public static void Rise(){Console.WriteLine("太陽從東方升起!");if (OnRise != null)OnRise(null, null);}}/*在程序中新建一個公雞類 Cock ,在其中定義私有字段 _name ,針對 Sun.OnRise 事件的處理方法 Sun_OnRise,* 事件 OnSing,以及引發該事件的方法 Sing;在類的構造函數中初始化字段,并將事件處理方法與事件相關聯。* 參考源代碼如下(Sun_OnRise 方法中調用了 Sing 方法,表示太陽升起會使公雞打鳴) : */public class Cock{private string _name;public Cock(string name){_name = name;Sun.OnRise += new EventHandler(Sun_OnRise);}private void Sun_OnRise(object sender, EventArgs e){Console.WriteLine("公雞{0}:", _name);Console.WriteLine("雄雞一聲天下白!");this.Sing();}public event EventHandler OnSing;public void Sing(){Console.WriteLine("喔喔喔……");if (OnSing != null)OnSing(this, null);}}/*在程序中新建一個主人類 Host,在其中同樣定義字段_name,起床事件 OnGetup ,起床方法 Getup (引發起床事件) ,養雞方法 Foster ,* 以及 Cock.OnSing 事件的處理方法 c1_OnSing,并在 Foster 方法中與事件相關聯。* 參考源代碼如下(c1_OnSing 方法中調用了 Getup 方法,表示公雞打鳴會使主人起床) :*/public class Host{private string _name;public Host(string name) { _name = name; }public event EventHandler OnGetup;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.WriteLine("主人{0}:", _name);Console.WriteLine("聞雞起舞!");this.Getup();}}/*參照 Cock 類和 Host 類中的代碼,新建狗類 Dog 和貓類 Cat,* 在其中定義字段 _owner 以記錄其主人對象,定義 owner_OnGetup 方法以處理 Host.OnGetup 事件(主人起床時,輸出狗叫聲"汪汪"和貓叫聲"喵喵";)* 通過屬性 Owner 封裝字段_owner,并在其 set 訪問函數中關聯事件和事件處理方法。 */public class Dog {private string _name;private Host _owner;public Dog(string name) { _name = name; }public Host Owner{set { _owner = value;value.OnGetup += new EventHandler(owner_OnGetup);}}public void owner_OnGetup(object sender, EventArgs e){Console.WriteLine("汪汪");}} public class Cat {private string _name;private Host _owner;public Cat(string name) { _name = name; }public Host Owner{set { _owner = value;value.OnGetup += new EventHandler(owner_OnGetup);}}public void owner_OnGetup(object sender, EventArgs e){Console.WriteLine("喵喵");}}/*在程序主方法中依次創建雞、主人、狗、貓對象,而后調用 Sun.Rise 方法,參考源代碼如下:*/public class Program {static void Main(){//編譯運行程序,看看"太陽升起"這一事件會引發怎樣的連鎖反應。Cock cock1 = new Cock("花花");Host host1 = new Host("祖逖");host1.Foster(cock1);Dog dog1 = new Dog("旺財");dog1.Owner = host1;Cat cat1 = new Cat("咪咪");cat1.Owner = host1; Sun.Rise();}}}運行結果
總結
以上是生活随笔為你收集整理的C#——事件(Event)DEMO[闻鸡起舞]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#——委托(delegate)DEMO
- 下一篇: C#——银行ATM程序DEMO