共用方式為


泛型委派 (C# 程式設計指南)

委派可以定義自己的類型參數。 參考泛型委派的程式代碼可以指定類型自變數來建立封閉的建構型別,就像在具現化泛型類別或呼叫泛型方法時一樣,如下列範例所示:

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

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

C# 2.0 版具有稱為方法群組轉換的新功能,適用於具體和泛型委派類型,並可讓您使用這個簡化的語法撰寫上一行:

Del<int> m2 = Notify;

泛型類別內定義的委派可以使用與類別方法相同的泛型類別類型參數。

class Stack<T>
{
    public delegate void StackDelegate(T[] items);
}

參考委派的程式代碼必須指定包含類別的類型自變數,如下所示:

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

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

泛型委派在根據一般設計模式定義事件時特別有用,因為傳送者參數可以強型別化,不再需要進行類型轉換至和從 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)
    {
        if (StackEvent is not null)
            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;
}

另請參閱