所以这是代码:
public interface IObserver<T> where T : StackEventData<T>
{
void HandleEvent(StackEventData<T> eventData);
}
public class Observer<T> : IObserver<T> where T : StackEventData<T>, new()
{
public StringBuilder Log = new StringBuilder();
public void HandleEvent(StackEventData<T> eventData)
{
Log.Append(eventData);
}
}
public class StackOperationsLogger
{
private readonly Observer<T> observer = new Observer<T>();
}
我需要在 StackOperationsLogger 中初始化 Observer 观察者,而不使 StackOperationsLogger 通用。有什么建议么?
最佳答案
一个巨大的问题是接口(interface)的原始通用定义。
public interface IObserver<T> where T : StackEventData<T>
由于类型约束是递归定义的,因此您无法按照您想要的方式使用它。本质上,T 类型必须是这样的:StackEventData<StackEventData<StackEventData<StackEventData<T>>>>
等等。我认为这不是您正在寻找的。p>
我有一种感觉,这就是您正在寻找的东西。
public interface IObserver<T>
{
void HandleEvent(StackEventData<T> eventData);
}
public class Observer<T> : IObserver<T>
{
public StringBuilder Log = new StringBuilder();
public void HandleEvent(StackEventData<T> eventData)
{
Log.Append(eventData);
}
}
public class StackOperationsLogger
{
private readonly Observer<DataObject> observer = new Observer<DataObject>();
}
关于c# - 创建泛型类的实例 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55206113/