簡介
類型安全機制的實現原來采用的是C風格的回調(callback)函數,而 .NET Framework引入了委托和事件來替代原來的方式;它們被廣泛地使用。我們在這里嘗試使用 標準 C++來實現與之類似的功能,這樣我們不但可以對這些概念有一個更好的認識,而且同時還能夠體驗C++的一些有趣的技術。
美女啦啦隊招募中 縱情享受人生第一樂趣
新浪招商引資征代理商 上網實用手冊
C#中的委托與事件關鍵字
首先我們來看一個簡單的C#程序(下面的代碼略有刪節)。執行程序的輸出結果如下顯示:
SimpleDelegateFunction called from Ob1,
string=Event fired!
Event fired!(Ob1): 3:49:46 PM on
Friday, May 10, 2002
Event fired!(Ob1): 1056318417
SimpleDelegateFunction called from Ob2,
string=Event fired!
Event fired!(Ob2): 3:49:46 PM on
Friday, May 10, 2002
Event fired!(Ob2): 1056318417
所有這些都源于這樣一行代碼:dae.FirePrintString("Event fired!");
在利用C++來實現這些功能時,我模仿了C#的語法并完全按照功能的要求進行開發。
namespace DelegatesAndEvents
{
class DelegatesAndEvents
{
public delegate void PrintString(string s);
public event PrintString MyPrintString;
public void FirePrintString(string s)
{
if (MyPrintString != null)MyPrintString(s);
}
}
class TestDelegatesAndEvents
{
[STAThread]
static void Main(string[] args)
{
DelegatesAndEvents dae =new DelegatesAndEvents();
MyDelegates d = new MyDelegates();
d.Name = "Ob1";
dae.MyPrintString +=new DelegatesAndEvents.PrintString(d.SimpleDelegateFunction);
// ... more code similar to the
// above few lines ...
dae.FirePrintString("Event fired!");
}
}
class MyDelegates
{
// ... "Name" property omitted...
public void SimpleDelegateFunction(string s)
{
Console.WriteLine("SimpleDelegateFunction called from {0}, string={1}", m_name, s);
}
// ... more methods ...
}
}
原文轉自:http://www.anti-gravitydesign.com