C#基礎系列--C#中委託與事件(三)

l_serein發表於2012-10-17

例項:

class Program
    {
        static void Main(string[] args)
        {
            DelegateEvent de = new DelegateEvent();
            de.Do();
            Console.Read();
        }
}

 

class DelegateEvent
    {
        public void Do() {
            FangDiChanPublisher fdc = new FangDiChanPublisher();
            BuyerSubscriber buyer = new BuyerSubscriber();
            buyer.BuyerDemand = "80平方米,100萬元RMB,三室一廳的房子";
            fdc.PublisherHouseInfo();
            fdc.FindHouseEvent += new HouseDelegateHandler(buyer.BuyHouse);//買房者委託中介找房
            fdc.FindHouse();          // 應該通過FindHouse()來觸發事件
            //fdc.FindHouse();     // 但可以被這樣直接呼叫,對委託變數的不恰當使用,當Publisher的委託變數被註釋後,則不能這樣使用
           
        }
    }

    //定義委託:定義一個房地產中介. 委託是將方法(函式)做為引數傳遞
    public delegate void HouseDelegateHandler(string message);

    //定義事件釋出者
    public class FangDiChanPublisher
    {
        //public HouseDelegateHandler FindHouseEvent;
        public event HouseDelegateHandler FindHouseEvent;// 宣告一個事件

        public static string BuyerDemand
        {
            set;
            get;
        }

        public void PublisherHouseInfo()
        {
            Console.WriteLine("深圳某某房地產中介釋出房源資訊:擁有大量優勢房源,有意者請聯絡:xxxxxxx");
        }

        public void FindHouse() {
            //做其他事情...

            if (FindHouseEvent != null)//如果有買房者委託了中介找房
            {
                FindHouseEvent(BuyerDemand);
                Find();//在已有的房源中找匹配的房子...
            }
        }

        public void Find()
        {
            Console.WriteLine("(深圳某某房地產中介)只花了一小會工夫房子就找到了合適的房子.");
        }
    }

    //定義事件訂閱者
    public class BuyerSubscriber
    {
        public string BuyerDemand
        {
            set{FangDiChanPublisher.BuyerDemand =value;}
        }
        public void BuyHouse(string demand)
        {
            Console.WriteLine("買房者跟房地產中介提出的需求:{0}",demand);
        }
    }

 

相關文章