c# - 创建泛型类的实例 C#

标签 c# generics interface

所以这是代码:

  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>>>>等等。我认为这不是您正在寻找的。

我有一种感觉,这就是您正在寻找的东西。

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/

相关文章:

c# - 无法将运行时连接字符串转换为其设计时等效项

c# - 如何从数据表中获取行号?

c# - Linq 查询未在 MVC 应用程序中转换为字符串

java - 一个接口(interface)只能实现一个参数化——如何解决?

c# - 界面设计?我可以迭代地做吗?我应该如何处理界面的更改?

c# - 串行处理 ConcurrentQueue 并限制为一个消息处理器。正确的模式?

java - 尝试创建和测试可比较的 arraylist 类

generics - 冲突的特征实现,即使关联类型不同

c# - 将 Task<object> 转换为 Task<T>,其中 T 未知

java - 在java中用double返回一个对象?