首页 > 解决方案 > 将泛型类型提取到接口中

问题描述

我有两个接口

  public interface IEventBusExchange<in TQueue, TMessage> 
    where TQueue : struct
    where TMessage : DtoBase
  {
    Task PublishAsync(TMessage message);
    Task SubscribeAsync(TQueue queue, Func<TMessage, bool> callback);
  }
  public interface ISubscriber<TQueue, TMessage> : ISubscriber
    where TQueue : struct
    where TMessage : class
  {
    TQueue Queue { get; }
    Task<bool> CallbackAsync(TMessage message);
  }

和 ISubscribe 的抽象类

  public abstract class Subscriber<TExchange, TQueue, TMessage> : ISubscriber<TQueue, TMessage> 
    where TExchange : IEventBusExchange<TQueue, TMessage>
    where TQueue : struct
    where TMessage : DtoBase
  {
    ...
  }

我想做的是从 IEventbusExchange 中提取 TQueue 和 TMessage,这样我就可以使抽象类更简单并且类型安全。

是否可以在 c# 中执行此操作?

解决方案应如下所示:

  public abstract class Subscriber<TExchange> : ISubscriber<TQueue, TMessage>   
    where TExchange : IEventBusExchange<TQueue, TMessage>
  {
    ...
  }

标签: c#genericsinterface

解决方案


推荐阅读