Delegate C#

delegate is a type that safely encapsulates a method, similar to a function pointer in C and C++. Unlike C function pointers, delegates are object-oriented, type safe, and secure. The type of a delegate is defined by the name of the delegate.

public delegate void Del(string message);
// Create a method for a delegate.
public static void DelegateMethod(string message)
// Instantiate the delegate.
Del handler = DelegateMethod;

// Call the delegate.
handler(“Hello World”);

delegate can be associated with a named method. When you instantiate a delegate using a named method, the method is passed as a parameter, for example:

// Declare a delegate:
delegate void Del(int x);

// Define a named method:
void DoWork(int k) { /* ... */ }

// Instantiate the delegate using the method as a parameter:
Del d = obj.DoWork;

The method that you pass as a delegate parameter must have the same signature as the delegate declaration.

A delegate instance may encapsulate either static or instance method.

Although the delegate can use an out parameter, it is not recommended to use it with multicast event delegates because there is no way to know which delegate will be called.


In the following example, one delegate is mapped to both static and instance methods and returns specific information from each.

// Declare a delegate
delegate void Del();

class SampleClass
    public void InstanceMethod()
        System.Console.WriteLine("A message from the instance method.");

    static public void StaticMethod()
        System.Console.WriteLine("A message from the static method.");

class TestSampleClass
    static void Main()
        SampleClass sc = new SampleClass();

        // Map the delegate to the instance method:
        Del d = sc.InstanceMethod;

        // Map to the static method:
        d = SampleClass.StaticMethod;


A message from the instance method.

A message from the static method.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s