Delegáti obecný (Příručka programování 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 Generics (Příručka programování C#)
Obecné metody (Příručka programování C#)
Obecný tříd (Příručka programování C#)
Obecné rozhraní (Příručka programování C#)
Delegáti (Příručka programování C#)