Udostępnij za pośrednictwem


Rodzajowy delegatów (Podręcznik programowania C#)

A delegować można zdefiniować własne parametry typu.Kod, że odwołania Delegat rodzajowy można określić argument typu zamkniętego typu skonstruowane, podobnie jak podczas tworzenia uruchamianiu tego klasą rodzajową lub wywołanie metody rodzajowej, jak pokazano w następującym przykładzie:

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

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

C# w wersji 2.0 zawiera nową funkcję zwaną konwersji grupy metody, które stosuje się do typów obiektów delegowanych konkretne, jak również ogólny i umożliwia pisanie poprzedniego wiersza z tej składni uproszczone:

Del<int> m2 = Notify;

Pełnomocnicy zdefiniowane w klasie rodzajowy można używać parametrów typu klasą rodzajową w taki sam sposób metody klasy.

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

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

Kod, który odwołuje się do pełnomocnika należy określić argument typu klasa zawierająca w następujący sposób:

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

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

Rodzajowy delegatów są szczególnie przydatne przy definiowaniu zdarzenia oparte na wzorzec projektowania typowego, ponieważ argument nadawcy można zdecydowanie wpisana i nie ma być oddane do i z 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;
}

Zobacz też

Informacje

Wprowadzenie do generyczne (Podręcznik programowania C#)

Metody rodzajowe (Podręcznik programowania C#)

Klas rodzajowych (Podręcznik programowania C#)

Rodzajowy interfejsów (Podręcznik programowania C#)

Pełnomocnicy (Podręcznik programowania C#)

System.Collections.Generic

Koncepcje

Podręcznik programowania C#

Inne zasoby

Generyczne w.NET Framework