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