通用接口<;T>;作为任何派生T的构造函数参数

本文关键字:派生 任何 参数 构造函数 gt 接口 lt | 更新日期: 2023-09-27 17:59:40

实际上,我不太关心这里的派生端点。我需要的一切都是基础。我只想能够传入任何IClient,并使用它的方法,而不管派生的端点是什么

免责声明:在我努力去除多余的东西的过程中,我很可能将其简化为不完全相同的东西。

我有下面的构造函数

  public SomeClass(????? client)
  {
      _client = client;
  }
  public SomeMethod<TEndPoint>(SpecialObject o, TEndPoint e)
    where TEndPoint: Endpoint
  {
      Validate(o);
      //Do OtherStuff
      _client.UploadToClient(o, e)
  }

界面如下

  public interface IClient<TEndpoint> where TEndpoint: Endpoint
  {
      TEndpoint UploadToClient(obj o, endpoint e)
  }

我有一些实现

public class Client1: IClient<Endpoint1>
public class Client2: IClient<Endpoint2>

是否有任何模式/示例可以让我在不指定特定类型的情况下使用通用接口作为参数?


此外,我可以围绕一些事情进行设计,真正的主要目标是我不想让SomeCase通用,但希望能够干净、动态地接受任何实现IClient<>的东西。

通用接口<;T>;作为任何派生T的构造函数参数

我看不出这怎么可能奏效。没有办法阻止这种情况的发生。

SomeClass myInstance = new SomeClass(new Client1());
Endpoint2 e2 = new Endpoint2();
myInstance.SomeMethod<Endpoint2>(o, e2);

注意,由于myInstance的构造,它只能处理Endpoint1,但它允许我使用Endpoint2调用SomeMethod,即使客户端会失败。如果你愿意放弃静态类型安全,你可以声明所有的dynamic并结束它。

假设您的接口可以修改。以下内容不能解决你的问题吗?

public interface IClient
{
    void UploadToClient<TEnd>(obj o, TEnd endpoint) where TEnd: Endpoint;
}