C#入门经典第五版 示例 3

13 章的一个 学习委托的例子

//
// 功能:学习委托
// 
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;     // 定时器

namespace benben_CSharp_first
{  
    public delegate void MessageHandler(string messageText); // 定义了委托,其实可以相似的理解.c++ 中函数指针..
                                                             //(注意只是方便理解哦.其实不同的,可以搜索学习一下"函数指针与委托")

    public class Connection
    {
        public event MessageHandler MessageArrived;
        private Timer pollTimer;

        public Connection()
        {
            pollTimer = new Timer(100);
            pollTimer.Elapsed += new ElapsedEventHandler(BenDisplay);   // 加入一个处理链
            pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
        }

        public void Connect()
        {
            pollTimer.Start();
        }

        public void Disconnct()
        {
            pollTimer.Stop();
        }

        private static Random random = new Random();

        private void CheckForMessage(object source, ElapsedEventArgs e)
        {
            Console.WriteLine("Checking for new message.");
            if ((random.Next(9) == 0) && (MessageArrived != null))
            {
                MessageArrived("Hello Mom!");
            }
        }

        private void BenDisplay(object source, ElapsedEventArgs e)
        {
            Console.Write("   *^^* ==>BenDisplay...   ");
        }
    }
    
    public class Display
    {
        public void DisplayMessage(string message)
        {
            Console.WriteLine("Message arrived: {0}", message);
        }

        public void show(string message)
        {
            Console.WriteLine("呵呵 {0}", message);
        }
    }

    class Test
    {
        static void Main()
        {
            Console.WriteLine(); // 我的机很奇怪.. 总是在在主函数输出,才会有其他地方输入的. 

            Connection myConnection = new Connection();
            Display myDisplay = new Display();

            myConnection.MessageArrived +=
                new MessageHandler(myDisplay.DisplayMessage);
            myConnection.MessageArrived +=
                new MessageHandler(myDisplay.show);


            myConnection.Connect();  

            Console.ReadKey();
        }       
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值