http://www.myelin.co.nz/notes/callbacks/cs-delegates.html
http://msdn.microsoft.com/en-us/library/Bb985784
http://msdn.microsoft.com/en-us/magazine/cc301810.aspx
If you're used to function pointers in C, a delegate is basically a pair of pointers rolled into one:
- A pointer to an object (optional)
- A pointer to a method of that object
You define them like this in C#:
public delegate void FooCallbackType( int a, int b, int c );When you want to use them, you make delegate out of the function you want to call:
class CMyClass { public void FunctionToCall( int a, int b, int c ) { // This is the callback } public static void Foo() { FooCallbackType myDelegate = new FooCallbackType( this.FunctionToCall ); // Now you can pass that to the function // that needs to call you back. } }If you want to make a delegate to point to a static method, it just looks the same:
class CMyClassWithStaticCallback { public static void StaticFunctionToCall( int a, int b, int c ) { // This is the callback } public static void Foo() { FooCallbackType myDelegate = new FooCallbackType( CMyClass.StaticFunctionToCall ); } }All in all, they do the same thing as interface-based callbacks in C++, but cause a bit less trouble because you don't need to worry about naming your functions or making helper objects, and you can make delegates out of any method. They're more flexible.