现在的位置: 首页 > 综合 > 正文

C#基础系列–C#中委托与事件(三)

2013年05月27日 ⁄ 综合 ⁄ 共 1702字 ⁄ 字号 评论关闭

 实例:

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);
        }
    }

 

抱歉!评论已关闭.