using namespace System; ref strUCt A { static int Square(int i) { return i * i; } }; ref struct B { int Cube(int i) { return i * i * i; } }; /*1*/ delegate int Del(int value);
int main() { /*2*/ Del^ d = gcnew Del(&A::Square); /*3*/ Console::WriteLine("d(10) result = {0}", d(10)); /*4*/ B^ b = gcnew B; /*5*/ d = gcnew Del(b, &B::Cube); /*6*/ Console::WriteLine("d(10) result = {0}", d(10)); } 靜態函數A::Square與實例函數B::Cube對Del來說,都具有相同的參數類型及返回類型,因此它們能被包裝進同類型的代理中。注重,即使兩個函數均為public,當考慮它們與Del的兼容性時,它們的可訪問性也是不相關的,這樣的函數也能被定義在相同或不同的類中,主要由程序員來選擇。
Client A received message Message 2 Client A received message Message 3 Client B received message Message 3 Client A received message Message 4 Client B received message Message 4 Client C received message Message 4 Client B received message Message 5 Client C received message Message 5 Client C received message Message 6 盡管3個對象均為同一類型,但這并不是必須的,只要定義的函數可與NewMsgEventHandler兼容,就能使用任意的類型。