Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

delegate (C# Reference)

The declaration of a delegate type takes the following form:

public delegate void TestDelegate(string message);

The delegate keyword is used to declare a reference type that can be used to encapsulate a named or an anonymous method. Delegates are similar to function pointers in C++; however, delegates are type-safe and secure. For applications of delegates, see Delegates and Generic Delegates.

Delegates are the basis for Events.

A delegate can be instantiated by associating it either with a named or anonymous method. For more information, see Named Methods and Anonymous Methods.

For use with named methods, the delegate must be instantiated with a method that has an acceptable signature. For more information on the degree of variance that is allowed in the method signature, see Covariance and Contravariance in Delegates. For use with anonymous methods, the delegate and the code to be associated with it are declared together. Both ways of instantiating delegates are discussed in this section.

using System;
// Declare delegate -- defines required signature:
delegate void SampleDelegate(string message);

class MainClass
    // Regular method that matches signature:
    static void SampleDelegateMethod(string message)

    static void Main()
        // Instantiate delegate with named method:
        SampleDelegate d1 = SampleDelegateMethod;
        // Instantiate delegate with anonymous method:
        SampleDelegate d2 = delegate(string message)

        // Invoke delegate d1:
        // Invoke delegate d2:
        d2(" World");

For more information, see the following sections in the C# Language Specification:

  • 1.11 Delegates

  • 15 Delegates

© 2016 Microsoft