我有一个列表,其中必须包含 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/