c# - 如何创建包含开放通用接口(interface)的 List<T> ?

标签 c# list generics interface

我有一个列表,其中必须包含 IInteract 对象。但 IInteract 是一个通用接口(interface),需要 2 个类型参数。

我的主要想法是迭代对象列表,如果它们尚未交互,则与另一个对象“交互”。 所以我有这个对象

List<IObject> WorldObjects = new List<IObject>();

还有这个:

private List<IInteract> = new List<IInteract>();

除了我无法编译最后一行,因为 IInteract 需要 2 个类型参数。但我不知道这些论点是什么,直到我添加它们。我可以添加类型 A 和 A 的对象...或类型 B 和 C 的对象之间的交互。

我想创建“交互”类,它对“代理”对象和“目标”对象执行某些操作,但我希望它们独立于对象......所以我可以在例如之间添加交互。 .. “SuperUltraClass” 和...“整数”

我使用了错误的方法吗?

最佳答案

假设 IInteract 定义为类似

interface IInteract<T1, T2>

并且您将其用于 Foo 类的字段:

class Foo
{
  List<IInteract...> field;
}

然后,如果您想推迟决定将哪些类型绑定(bind)到 IInteract 类型参数,则需要参数化容器类:

class Foo<T1, T2>
{
   List<IInteract<T1, T2>> field;
}

当您定义容器类的具体实例时,此处 IInteract 的类型参数将被绑定(bind),例如:var x = new Foo<int, double>().这将导致 IInteract 字段的类型为 IInteract<int, double>对于 Foo 泛型类型的特定实例。

关于c# - 如何创建包含开放通用接口(interface)的 List<T> ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521587/

相关文章:

c# - InternetExplorer COMException : System. Runtime.InteropServices.COMexception: RPC 服务器不可用

c# - 如何创建线程安全的通用列表?

Java - 使用泛型或继承

java - 一般问题 : T extends interface type. 无法调用方法来返回扩展类型的对象?

c# - Linq 用表达式查询抽象,哪种方式更好?

C# 字符串 float ?

c# - 使用参数调用resx

list - Haskell:用关联列表中的给定键替换元素

Java程序再次运行时弹出错误信息

Python 3.6 - 在包含字典的列表中搜索单词,列表中包含字典