由于性能原因,我有一些结构类型,并且有一些共性。我想知道我是否可以将它们重构为开放式结构 - 如果可以的话,我是否应该期待任何问题。
答案 0 :(得分:5)
是的,你可以。框架库提供的一些泛型类型(例如KeyValuePair<TKey, TValue>
)确实是structs
。
答案 1 :(得分:4)
更新:显然,“开放式”并不意味着与“开放式”的C#规范定义相同。你的意思是“泛型”。
是的,结构可以是通用的。
回答你问题的第二部分:我不知道你有什么样的“问题”。你能给我一个你觉得有问题的例子吗?
原始答案,假设您实际上询问开放类型:
C#规范在这一点上很清楚:
•A type参数定义一个开放类型。
•如果和,数组类型是开放类型 只有当它的元素类型是开放的 类型。
•构造类型是开放的 当且仅当一个或多个时,才输入 type参数是一个开放类型。一个 构造嵌套类型是开放的 当且仅当一个或多个时,才输入 类型参数或类型参数 其含有的类型是开放的 类型。
所以你去吧。结构类型是一种开放类型,当且仅当它或其封闭类型是一个泛型类型,其类型参数之一具有开放类型。例如:
struct S<T>
{
S<T> s1; // open struct type
Nullable<S<T>> s2; // another open struct type
}
class O<V>
{
class C<U> where U : struct
{
struct R
{
U u; // open type constrained to be value type
R r1; // open struct type; this is O<V>.C<U>.R
O<V>.C<S<U>>.R r2; // another open struct type.
O<int>.C<S<V>>.R r3; // another open struct type
}
}
}
我们可以整天继续制作开放的结构类型。