程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 學習c#的事件時寫的一個小程序

學習c#的事件時寫的一個小程序

編輯:關於C語言
這是學習事件時候寫的一個簡單的例子,以加深對對事件的理解。此程序參照了.Net文檔中的
鬧鐘例子。

Note:
1.這個例子模擬這樣一個情形:
當主人肚子餓的時候,他會引發一個吃飯事件, 並說明一些與吃飯有關的數據(如:地點)
這個事件由他的僕人來處理(告訴主人食物已經准備好了)。但主人由哪個僕人伺候呢?並且
主人什麼時候肚子餓呢? 這就由上帝來安排了。比如說,上帝安排秦始皇的僕人是李斯,在
中午12點的時候,上帝會叫這個主人肚子餓。

2.實現此例子的主要元素:
類EatEventArgs--封裝與吃飯事件有關的一些數據;
委托EatEventHandler--處理吃飯這個事件的模式(類似c++中的函數指針);
類Master--這個類將引發吃飯事件(EatEvent);
類Servant--這個類擁有處理吃飯事件的方法,此方法滿足委托EatEventHandler模式。

3.為了將注意力放在事件的學習上,我將類的一些數據域(fIEld)設為公有(public)。

4.在源代碼中加上必要和詳細的注釋是個好習慣。

************************************************************************************/


using System;

namespace nsEventSample
{
/// <summary>
/// 類EatEventArgs 必須繼承自類EventArgs,用來引發事件時封裝數據
/// </summary>
public class EatEventArgs : EventArgs
{
public String restrauntName; //飯店名稱
public decimal moneyOut; //准備消費金額
}

/// <summary>
/// 這個委托用來說明處理吃飯事件的方法的方法頭(模式)
/// </summary>
public delegate void EatEventHandler(object sender, EatEventArgs e);

/// <summary>
/// 引發吃飯事件(EateEvent)的類Master(主人),這個類必須
/// 1.聲明一個名為EatEvent的事件: public event EatEventHandler EatEvent;
/// 2.通過一個名為OnEatEvent的方法來引發吃飯事件,給那些處理此事件的方法傳數據;
/// 3.說明在某種情形下引發事件呢?在餓的時候。用方法Hungrg來模擬。
/// </summary>
public class Master
{
//聲明事件
public event EatEventHandler EatEvent;

//引發事件的方法
public void OnEatEvent(EatEventArgs e)
{
if (EatEvent != null)
{
EatEvent(this, e);
}
}

//當主人餓的時候,他會指定吃飯地點和消費金額。
public void Hungry(String restrauntName, decimal moneyOut)
{
EatEventArgs e = new EatEventArgs();
e.restrauntName = restrauntName;
e.moneyOut = moneyOut;

Console.WriteLine("主人說:");
Console.WriteLine("我餓了,要去{0}吃飯,消費{1}元", e.restrauntName, e.moneyOut);

//引發事件
OnEatEvent(e);
}
}

/// <summary>
/// 類Servant(僕人)有一個方法ArrangeFood(安排食物)來處理主人的吃飯事件
/// </summary>
public class Servant
{
public void ArrangeFood(object sender, EatEventArgs e)
{
Console.WriteLine();
Console.WriteLine("僕人說:");
Console.WriteLine("我的主人, 您的命令是 : ");
Console.WriteLine("吃飯地點 -- {0}", e.restrauntName);
Console.WriteLine("准備消費 -- {0}元 ", e.moneyOut);
Console.WriteLine("好的,正給您安排。。。。。。。。");
Console.WriteLine("主人,您的食物在這兒,請慢用");
}
}

/// <summary>
/// 類God安排qinshihuang(秦始皇)的僕人是lisi(李斯),並讓李斯的ArrangeFood
/// 方法來處理qinshihuang的吃飯事件:qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
/// </summary>
public class God
{
public static void Main()
{
Master qinshihuang = new Master();
Servant lishi = new Servant();

qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);

//秦始皇餓了,想去希爾頓大酒店,消費5000元
qinshihuang.Hungry("希爾頓大酒店", 5000.0m);
}
}
}

/***********************************************************************************
程序結果:
主人說:
我餓了,要去希爾頓大酒店吃飯,消費5000.0元

僕人說:
我的主人, 您的命令是 :
吃飯地點 -- 希爾頓大酒店
准備消費 -- 5000.0元
好的,正給您安排。。。。。。。。
主人,您的食物在這兒,請慢用
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved