C# Delegate/Event代码示例

示例一:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateHeater_1
{
    public class Heater
    {
        private int temperature;
        public string label = "A.O.Smith";
        public string type ="JSP-100" ;
        public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
        public event BoiledEventHandler Boiled;

        //传递给观察者的参数对象
        public class BoiledEventArgs : EventArgs
        {
            public readonly int temperature;

            public BoiledEventArgs(int param)
            {
                this.temperature = param;
            }
        }

        //如果有对象注册,调用所有注册对象的相关方法
        public void OnBoiled(BoiledEventArgs e)
        {
            if (Boiled != null)
            {
                Boiled(this, e);
            }
        }

        public void BoilWater()
        {
            for (int i = 0; i < 100; i++)
                temperature = i;

            if (temperature > 95)
            {
                BoiledEventArgs e = new BoiledEventArgs(temperature);
                OnBoiled(e);
            }
        }
    }

    public class Alarm
    {
        public void MakeAlert(Object sender, Heater.BoiledEventArgs e)
        {
            Heater ht = (Heater)sender;
            Console.WriteLine(ht.label);
            Console.WriteLine(ht.type);
            Console.WriteLine("警告:现在的温度是{0}。",e.temperature);
        }
    }

    public class Display
    {
        public static void ShowMessage(Object sender, Heater.BoiledEventArgs e)
        {
            Heater ht = (Heater)sender;
            Console.WriteLine(ht.label);
            Console.WriteLine(ht.type);
            Console.WriteLine("显示:现在的温度是{0}",e.temperature);
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Heater ht = new Heater();
            ht.Boiled += (new Alarm()).MakeAlert;
            ht.Boiled += Display.ShowMessage;
            ht.BoilWater();

        }
    }
}



示例二:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateHeater_1
{
    public class Heater
    {
        private int temperature;
        public string label = "A.O.Smith";
        public string type ="JSP-100" ;
        public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
        public event BoiledEventHandler Boiled;

        //传递给观察者的参数对象
        public class BoiledEventArgs : EventArgs
        {
            public readonly int temperature;

            public BoiledEventArgs(int param)
            {
                this.temperature = param;
            }
        }

        //如果有对象注册,调用所有注册对象的相关方法
        public void OnBoiled(BoiledEventArgs e)
        {
            if (Boiled != null)
            {
                Boiled(this, e);
            }
        }

        public void BoilWater()
        {
            for (int i = 0; i < 100; i++)
                temperature = i;

            if (temperature > 95)
            {
                BoiledEventArgs e = new BoiledEventArgs(temperature);
                OnBoiled(e);
            }
        }
    }

    public class Alarm
    {
        public void MakeAlert(Object sender, Heater.BoiledEventArgs e)
        {
            Heater ht = (Heater)sender;
            Console.WriteLine(ht.label);
            Console.WriteLine(ht.type);
            Console.WriteLine("警告:现在的温度是{0}。",e.temperature);
        }
    }

    public class Display
    {
        public static void ShowMessage(Object sender, Heater.BoiledEventArgs e)
        {
            Heater ht = (Heater)sender;
            Console.WriteLine(ht.label);
            Console.WriteLine(ht.type);
            Console.WriteLine("显示:现在的温度是{0}",e.temperature);
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Heater ht = new Heater();
            ht.Boiled += (new Alarm()).MakeAlert;
            ht.Boiled += Display.ShowMessage;
            ht.BoilWater();

        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值