Sdílet prostřednictvím


Obecní delegáti (Průvodce programováním v C#)

A delegáta lze definovat vlastní parametry typu.Kód, že odkazy obecný delegáta můžete zadat argument typu vytvoření uzavřené typu vyrobeno, stejně jako při konkretizaci Obecná třída nebo volání obecná metoda, jak ukazuje následující příklad:

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

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

C# verze 2.0 má novou funkci nazývanou převod skupin metoda se vztahuje na typy betonu, jakož i obecný delegáta a umožňuje zapsat předchozí řádek s zjednodušené syntaxe:

Del<int> m2 = Notify;

Delegáti definované v rámci Obecná třída můžete použít parametry typu Obecná třída v stejným způsobem jako metody třídy.

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

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

Kód, který odkazuje delegát musíte zadat argument typ obsahující třídy, takto:

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

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

Obecný Delegáti jsou užitečné zejména při definici události založené na typické návrhového vzoru, protože argument odesílateli může být silný a nemá již přetypovat z a do 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;
}

Viz také

Referenční dokumentace

Úvod do obecných typů (Průvodce programováním v C#)

Obecné metody (Průvodce programováním v C#)

Obecné třídy (Průvodce programováním v C#)

Obecná rozhraní (Průvodce programováním v C#)

Delegáti (Průvodce programováním v C#)

System.Collections.Generic

Koncepty

Průvodce programováním v C#

Další zdroje

Obecné typy v architektuře .NET Framework