首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开放类型可以是结构吗?

开放类型可以是结构吗?
EN

Stack Overflow用户
提问于 2010-12-23 02:31:33
回答 2查看 253关注 0票数 4

出于性能原因,我有一些类型是结构体,并且具有一些共性。我想知道我是否可以将它们重构为开放类型结构--如果可以的话,我是否应该期待任何问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-23 02:38:31

可以,停那儿吧。框架库提供的一些泛型类型,例如KeyValuePair,实际上是structs

票数 5
EN

Stack Overflow用户

发布于 2010-12-23 03:12:04

更新:显然,您所说的“开放类型”并不意味着C#规范对“开放类型”的定义是相同的。你的意思是“泛型”。

是的,结构可以是泛型的。

回答你问题的第二部分:我不知道你脑海中有什么样的“问题”。你能给我举一个你觉得有问题的例子吗?

最初的答案,假设你实际上问的是开放类型:

C#规范在这一点上是明确的:

·类型参数定义了一个开放类型。

·当且仅当数组类型的元素类型是开放类型时,该数组类型才是开放类型。

·当且仅当一个或多个类型参数是开放类型时,构造的类型才是开放类型。当且仅当构造的嵌套类型的一个或多个类型参数或其包含类型的一个或多个类型参数是开放类型时,该构造的嵌套类型才是开放类型。

这就对了。当且仅当结构类型或其封闭类型是泛型类型且其类型参数之一具有开放类型时,该结构类型才是开放类型。例如:

代码语言:javascript
复制
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 
    }
  }
}

我们可以整天保持开放的结构类型。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4512406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档