Udostępnij za pośrednictwem


Delegaty ogólne (Przewodnik programowania w języku 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 typów ogólnych (Przewodnik programowania w języku C#)

Metody ogólne (Przewodnik programowania w języku C#)

Klasy ogólne (Przewodnik programowania w języku C#)

Interfejsy ogólne (Przewodnik programowania w języku C#)

Delegaty (Przewodnik programowania w języku C#)

System.Collections.Generic

Koncepcje

Przewodnik programowania w języku C#

Inne zasoby

Typy ogólne w oprogramowaniu .NET Framework