打开,关闭,绑定和未绑定的通用类型

时间:2012-02-03 11:05:43

标签: generics

我已经阅读了很多关于此的帖子,但我仍然不确定我是否完全理解这些定义。

以下是我认为的不同术语的例子。我在这里是正确的轨道,还是我仍然不理解这些概念。感谢

Array<T TArray> - unbound and open.
Array<int> - bound and closed.
Array<Array<T TArray> - bound and open.
Array<Array<int>> - bound and closed.

1 个答案:

答案 0 :(得分:4)

Unbound意味着类似typeof(Dictionary<,>)的内容。未绑定类型仅对Reflection有意义,并且只能在typeof()中使用,而不能在任何其他上下文中使用。 所有unbounds类型都是封闭类型,“unbound and open”组合是不可能的。

假设T是当前类/方法的类型参数:

Dictionary<,> - unbound and closed
Dictionary<string, int> - constructed and closed
Dictionary<int, T> - constructed and open
Dictionary<string, List<T>> - constructed and open
NonGenericClass - bound and closed

请注意,没有List<Dictionary<,>>这样的东西 - 未绑定的类型不能直接用作typeof()的类型参数。类型是未绑定的或完全绑定的。 如果一个类型是未绑定的,那么它就没有可以引用类型参数的地方,所以组合“unbound and open”是不可能的。