Representantes genéricos (Guia de programação C#)

A delegado pode definir seus próprios parâmetros de tipo.Código que referências delegado genérico pode especificar o argumento de tipo para criar um tipo construído fechado, exatamente sistema autônomo quando instanciar uma classe genérica ou chamar um método genérico, sistema autônomo mostrado no exemplo a seguir:

public delegate void Del<T>(T item);
public static void Notify(int i) { }

Del<int> m1 = new Del<int>(Notify);

Translation from VPE for Csharp versão 2.0 tem um novo recurso chamado de conversão de agrupar de método, que se aplica a tipos delegado concreto, bem sistema autônomo genéricos e permite que você gravar da linha anterior com esse simplificado de sintaxe:

Del<int> m2 = Notify;

Delegados definidos dentro de uma classe genérica podem usar os parâmetros de tipo de classe genérica da mesma maneira que métodos de classe.

class Stack<T>
{
    T[] items;
    int index;

    public delegate void StackDelegate(T[] items);
}

Código que referencia o delegado deve especificar o argumento do tipo da classe que contém, da seguinte maneira:

private static void DoWork(float[] items) { }

public static void TestStack()
{
    Stack<float> s = new Stack<float>();
    Stack<float>.StackDelegate d = DoWork;
}

Representantes genéricos são especialmente úteis na definição de eventos com base no padrão de design típico porque o argumento sender pode ser rigidez de tipos e não tem mais a ser convertido para / de Object.

delegate void StackEventHandler<T, U>(T sender, U eventArgs);

class Stack<T>
{
    public class StackEventArgs : System.EventArgs { }
    public event StackEventHandler<Stack<T>, StackEventArgs> stackEvent;

    protected virtual void OnStackChanged(StackEventArgs a)
    {
        stackEvent(this, a);
    }
}

class SampleClass
{
    public void HandleStackChange<T>(Stack<T> stack, Stack<T>.StackEventArgs args) { }
}

public static void Test()
{
    Stack<double> s = new Stack<double>();
    SampleClass o = new SampleClass();
    s.stackEvent += o.HandleStackChange;
}

Consulte também

Conceitos

Guia de Programação C#

Referência

Introdução ao Generics (guia de programação C#)

Métodos genéricos (Guia de programação C#)

Classes genéricos (guia de programação C#)

Interfaces genéricos (guia de programação C#)

Representantes (guia de programação C#)

System.Collections.Generic

Outros recursos

Classes genéricas no .NET Framework