委托
委托相当于C++的函数指针或者函数的引用。
using System;
public class FunClass
{
public void func1()
{
Console.WriteLine ("func 1");
}
public void func2()
{
Console.WriteLine ("func 2");
}
}
public class Test
{
public delegate void TestFunc();
public static void func3()
{
Console.WriteLine ("func 3");
}
public static void Main()
{
FunClass funClass = new FunClass ();
TestFunc testFunc1 = new TestFunc (funClass.func1);
TestFunc testFunc2 = new TestFunc (funClass.func2);
TestFunc testFunc3 = new TestFunc (func3);
testFunc1 ();
testFunc2 ();
testFunc3 ();
Console.ReadKey ();
}
}
事件
C#典型的观察者模式,需要借助于委托实现。先声明一个委托类型,用于说明注册事件的类型,然后再对观察者的事件进行注册,调用时说明。
Sender相当于事件的发出者,Receiver相当于观察者。
using System;
public class Sender
{
public delegate void SendMsg();
public event SendMsg sendEvent;
public void Send()
{
if (sendEvent == null)
{
Console.WriteLine ("No Event");
Console.ReadKey ();
}
else
{
sendEvent ();
Console.ReadKey ();
}
}
}
public class Receiver1
{
public void recMsg()
{
Console.WriteLine ("recMsg 1 !");
}
}
public class Recevier2
{
public void recMsg()
{
Console.WriteLine ("recMsg 2 !");
}
}
public class Test
{
public static void Main()
{
Sender sender = new Sender ();
sender.Send ();
Receiver1 receiver1 = new Receiver1 ();
Recevier2 receiver2 = new Recevier2 ();
sender.sendEvent += new Sender.SendMsg (receiver1.recMsg);
sender.sendEvent += new Sender.SendMsg (receiver2.recMsg);
sender.Send ();
}
}