关于结构体的问题

20 浏览
0 Comments

关于结构体的问题

MSDN称,一个16字节或更小的类最好作为struct来处理。为什么?这是否意味着如果一个struct超过16字节,它比一个类效率低,还是一样的?如何确定你的类是否小于16字节?除了不允许无参构造函数之外,还有什么限制struct无法像类一样运作?

0
0 Comments

在这段内容中,提到了一个关于结构体的问题:“什么限制了结构体像类一样的行为?”。接下来的内容介绍了结构体和类之间的几个区别,例如不能从结构体继承、不能有虚方法、不能实现接口等。虽然结构体的实例方法可以访问结构体的私有字段,但除此之外,它们的行为更像是辅助函数,而不是类方法那样有价值。

这个问题的出现是因为有人想了解结构体和类之间的差异。结构体和类都是C#中的数据类型,但它们有着不同的特性和用途。了解它们的区别对于正确地使用它们以及避免潜在的问题是很重要的。

解决这个问题的方法是通过查找相关的资料和文档来了解结构体和类之间的差异。在这段内容中,提到了一个链接和搜索建议,可以点击链接了解更多关于.NET类型内部的信息,也可以通过在Stack Overflow和Google中搜索“reference types vs value types”来了解结构体和类之间的差异。

以下是原文中提到的链接:.NET Type Internals

对于这个问题的回答也提到了一些具体的区别和限制,例如不能继承、不能有虚方法等。同时还提到了结构体实例方法的一些特点和用途。

总之,了解结构体和类之间的区别对于编写高效的代码和避免潜在的问题是非常重要的。通过查找相关的资料和文档,我们可以更好地理解它们的特性和用途,从而正确地使用它们。

0
0 Comments

问题的出现原因是关于类和结构体的效率问题。文章提到,效率主要指的是用来表示类或结构体所需的内存量。在32位平台上,分配一个对象至少需要16字节,在64位平台上,最小对象大小为24字节。因此,从使用的内存量来看,包含少于16字节数据的结构体将比相应的类更好。然而,使用的内存量并不是全部的故事。结构体(值类型)与引用类型(类)有根本的不同。如果不小心处理,结构体可能会不方便,并且实际上可能导致性能问题。解决方法是根据具体情况选择适合的方式。在大多数情况下,使用类会更好。

0
0 Comments

关于结构体的问题,有一些不同的答案,这个问题有点主观,但我能想到的一些原因是:

  • struct是值类型,class是引用类型。如果你使用16字节进行总存储,为每个对象创建内存引用(4到8字节)可能不值得。
  • 当你有非常小的对象时,它们通常可以被推入IL堆栈,而不是对象的引用。这可以加速一些代码,因为在被调用方的代码中消除了内存解引用。
  • 在IL中,类有一些额外的“废话”,如果你的数据结构非常小,那么这些废话都不会被使用,所以它只是你不需要的额外垃圾。

然而,结构体和类之间最重要的区别是,结构体是值类型,而类是引用类型。

哦!抱歉 - 我应该写“中间语言”,它是整个“CLR”(公共语言运行时)的一种简写 - 它是运行.NET代码的虚拟机。

没错,Freddy Rios。在.NET世界中,人们经常说“IL”时实际上是指“CLR”。关于这个主题的一本好书是Serge Lidin的《Inside Microsoft .NET IL Assembler》。请参见amazon.com/Inside-Microsoft-NET-IL-Assembler/dp/0735615470

Mike:只是对你的评论挑刺一下 😉 - IL是实际的字节码,而CLR是执行IL的运行时。它们是两个不同的概念。

我非常了解.NET方面,对于Java方面我就不太熟悉了 🙂

0