具有泛型类型的委托

delegate with generic type

我有一个委托 public delegate void ObserverCallback<T>(T value, string key);,我希望 value 参数是我想要的任何值。

我的 ObserverCallback 属性 在我的 class public ObserverCallback Callback; 显然 给了我这个错误 error CS0305: Using the generic type 'Observer.ObserverCallback<T>' requires 1 type arguments。此时,我不知道参数是什么类型。

我想修复该错误并能够通过构造函数传递函数 例如:

您的观察者 class 必须是通用的,然后您可以在构造函数中使用该参数:

public class Observer<T>
{
    public Observer(ObserverCallback<T> callback)
    {    

    }
}

用法:

var obs = new Observer<Player>(ACallbackFunction);

如果您需要将 Observer 用作非泛型,您可以从非泛型基础继承或实现一个公共接口。这里需要注意的是,使用 class 泛型参数 T 的方法将不可用,除非您明确地将其转换回 Observable<T>:

public class Observer
{
    public void SomeMethod()
    {

    }
}

public class Observer<T>
{
    public Observer(ObserverCallback<T> callback)
    {
    }
}

var observerList = new List<Observer>();
observerList.Add(new Observer<Player>(ACallbackFunction));
observerList.ForEach(o => o.SomeMethod());

public interface IObserver
{
    void SomeMethod();
}

public class Observer<T>: IObserver
{
    public Observer(ObserverCallback<T> callback)
    {
    }

    public void SomeMethod()
    {
    }
}

var observerList = new List<IObserver>();
observerList.Add(new Observer<Player>(ACallbackFunction));
observerList.ForEach(o => o.SomeMethod());

请注意,此通用参数 T 可用于 class 中的任何方法,因此您不必编写 public void MyMethod<T>(T value)(它声明通用参数 T), 然后你可以只写 public void MyMethod(T value) 因为通用参数是在 class 级别。