通用接口<;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<>的东西。
我看不出这怎么可能奏效。没有办法阻止这种情况的发生。
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;
}