具有泛型类型的委托
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
。此时,我不知道参数是什么类型。
我想修复该错误并能够通过构造函数传递函数 例如:
public Observer(ObserverCallback<???> callback)
private void ACallbackFunction(Player value)
var obs = new Observer(ACallbackFunction)
您的观察者 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 级别。
我有一个委托 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
。此时,我不知道参数是什么类型。
我想修复该错误并能够通过构造函数传递函数 例如:
public Observer(ObserverCallback<???> callback)
private void ACallbackFunction(Player value)
var obs = new Observer(ACallbackFunction)
您的观察者 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 级别。