关于结构体的问题
在这段内容中,提到了一个关于结构体的问题:“什么限制了结构体像类一样的行为?”。接下来的内容介绍了结构体和类之间的几个区别,例如不能从结构体继承、不能有虚方法、不能实现接口等。虽然结构体的实例方法可以访问结构体的私有字段,但除此之外,它们的行为更像是辅助函数,而不是类方法那样有价值。
这个问题的出现是因为有人想了解结构体和类之间的差异。结构体和类都是C#中的数据类型,但它们有着不同的特性和用途。了解它们的区别对于正确地使用它们以及避免潜在的问题是很重要的。
解决这个问题的方法是通过查找相关的资料和文档来了解结构体和类之间的差异。在这段内容中,提到了一个链接和搜索建议,可以点击链接了解更多关于.NET类型内部的信息,也可以通过在Stack Overflow和Google中搜索“reference types vs value types”来了解结构体和类之间的差异。
以下是原文中提到的链接:.NET Type Internals。
对于这个问题的回答也提到了一些具体的区别和限制,例如不能继承、不能有虚方法等。同时还提到了结构体实例方法的一些特点和用途。
总之,了解结构体和类之间的区别对于编写高效的代码和避免潜在的问题是非常重要的。通过查找相关的资料和文档,我们可以更好地理解它们的特性和用途,从而正确地使用它们。
关于结构体的问题,有一些不同的答案,这个问题有点主观,但我能想到的一些原因是:
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方面我就不太熟悉了 🙂