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

C# 通用接口<;T>;作为任何派生T的构造函数参数,c#,generics,interface,C#,Generics,Interface,实际上,我并不太关心这里的派生端点。我需要的一切都是基础。我只想能够传入任何IClient,并使用它的方法,而不管派生端点是什么 免责声明:很可能是在我努力删除额外的东西时,我将其简化为不完全相同的东西 我有以下构造函数 public SomeClass(????? client) { _client = client; } public SomeMethod<TEndPoint>(SpecialObject o, TEndPoint e) wh

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

免责声明:很可能是在我努力删除额外的东西时,我将其简化为不完全相同的东西

我有以下构造函数

  public SomeClass(????? client)
  {
      _client = client;
  }

  public SomeMethod<TEndPoint>(SpecialObject o, TEndPoint e)
    where TEndPoint: Endpoint
  {
      Validate(o);
      //Do OtherStuff
      _client.UploadToClient(o, e)
  }
publicsomeclass(????客户端)
{
_客户=客户;
}
公共方法(特殊对象o、趋势点e)
其中:端点
{
验证(o);
//做其他事情
_client.UploadToClient(o,e)
}
界面如下所示

  public interface IClient<TEndpoint> where TEndpoint: Endpoint
  {
      TEndpoint UploadToClient(obj o, endpoint e)
  }
公共接口IClient,其中TEndpoint:Endpoint
{
TEndpoint上载到客户端(对象o,端点e)
}
我有一些实现

public class Client1: IClient<Endpoint1>
public class Client2: IClient<Endpoint2>
public类客户端1:IClient
公共类客户端2:IClient
是否有任何模式/示例可以让我在不指定特定类型的情况下使用泛型接口作为参数



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

我不知道这是如何工作的。没有办法阻止这一切的发生

SomeClass myInstance = new SomeClass(new Client1());
Endpoint2 e2 = new Endpoint2();
myInstance.SomeMethod<Endpoint2>(o, e2);
SomeClass-myInstance=newsomeclass(newclient1());
Endpoint2 e2=新的Endpoint2();
somethod(o,e2);

请注意,
myInstance
由于其构造,只能处理
Endpoint1
,但它允许我使用
Endpoint2
调用somethod,即使客户端将失败。如果您愿意放弃静态类型安全性,您可以声明所有内容
动态
,并就此结束。

假设您的界面可以修改。以下这些方法不能解决您的问题吗

public interface IClient
{
    void UploadToClient<TEnd>(obj o, TEnd endpoint) where TEnd: Endpoint;
}
公共接口IClient
{
void UploadToClient(obj o,TEnd端点),其中TEnd:endpoint;
}

我可以,但在某些情况下,实现实际上需要原始实现。。这将推动重新设计的进程。我完全明白你所描述的问题。我留下了错误的细节。因为你是对的,所以我要稍微修改一下这个问题。然而,我实际上并不接近解决方案,因为我确实需要某种类型的安全性。我不相信在只保留一个非泛型的
SomeClass
的情况下,有可能实现您想要的类型安全性。