首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候可以使用结构而不是类?

什么时候可以使用结构而不是类?
EN

Stack Overflow用户
提问于 2009-04-10 19:52:06
回答 5查看 712关注 0票数 3

在我最近做的一个项目中,我在班上创建了一个结构来解决我遇到的一个问题。当一个同事回头看我的时候,他嘲笑地看着这个结构,说“把它变成一个类”。

除了我的之外,我没有任何理由不将它移到其他类中,只有在这个类中需要它,但是这种类型的下降是因为我不能使它成为一个嵌套类吗?

什么时候可以使用结构?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-10 19:56:38

您应该查看值类型使用指南:http://msdn.microsoft.com/en-us/library/y23b5415(vs.71).aspx

这篇文章列举了几个要点,但我认为最有价值的几点如下

  • 价值是不变的吗?
  • 是否希望类型具有值语义?

如果这两个问题的答案都是肯定的,那么您几乎肯定希望使用一个结构。否则我建议你去上课。

使用大量成员的结构存在问题。但我发现,如果我考虑以上两点,在我的价值类型中,我很少有超过建议的成员数目/大小。

票数 14
EN

Stack Overflow用户

发布于 2009-04-10 19:57:10

MSDN有一个很好的准则文件来涵盖结构的使用。概括地说:

  • 表现得像原始类型。
  • 实例大小小于16字节。
  • 是不可改变的。
  • 价值语义是可取的。

否则,使用类。

票数 8
EN

Stack Overflow用户

发布于 2009-04-10 23:46:31

您应该始终使用Class作为首选,仅出于非常具体的原因(正如其他人已经概述的那样)才更改为Structure

根据“在这个类中只需要它”的程度,您可以通过使用匿名类型完全避免嵌套类型;这只能在单个方法中工作:

代码语言:javascript
运行
复制
Public Class Foo
    Public Sub Bar
        Dim baz = New With { .Str = "String", .I = 314 }
    End Sub
End Class

您不能(很容易地-您可以用泛型做一些事情)以类型错误的方式将实例baz移出Sub之外。当然,Object可以保存任何东西,甚至是匿名类型的实例。

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

https://stackoverflow.com/questions/738685

复制
相关文章

相似问题

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