c# - 什么时候结构比类好?

标签 c# .net class structure

<分区>

副本:When to use struct in C#?

在 Microsoft .NET 2.0/3.5 中使用结构而不是某些类是否有实际原因?

“结构和类有什么区别?” - 这可能是“.NET 开发人员”职位空缺面试中最受欢迎的问题。面试官认为唯一正确的答案是“结构分配在堆栈上,类分配在堆上”,并且没有进一步询问。

一些谷歌搜索显示:

a) structures have numerous limitations and no additional abilities in comparison to classes and
b) stack (and as such structures) can be faster on very specialized conditions including:

  • size of data chunk less that 16 bytes
  • no extensive boxing/unboxing
  • structure's members are nearly immutable
  • whole set of data is not big (otherwise we get stack overflow)

(如有错误或不全,请更正/添加到此列表中)

据我所知,大多数典型的商业项目(ERM、会计、银行解决方案等)甚至都没有定义单一结构,而是将所有自定义数据类型定义为类。这种方法有什么问题或至少不完善吗?

注意:问题是关于普通业务应用程序的,请不要列出“异常”案例,例如游戏开发、实时动画、向后兼容性 (COM/Interop)、非托管代码等等 -这些答案已经在这个类似的问题下:

When to use struct?

最佳答案

As far as I know, most typical commercial projects (ERM, accouting, solutions for banks, etc.) do not define even a single structure, all custom data types are defined as classes instead. Is there something wrong or at least imperfect in this approach?

不!一切都完全正确。您的一般规则应该是始终默认使用对象。毕竟我们谈论面向对象编程是有原因的,而不是面向结构的编程(结构本身缺少一些 OO 原则,如继承和抽象)。

然而,结构有时会更好,如果:

  • 您需要精确控制使用的内存量(结构使用的内存(取决于大小)比对象使用的内存少一点。
  • 您需要精确控制内存布局。这对于与 Win32 或其他 native API 的互操作尤其重要
  • 您需要最快的速度。 (在许多具有较大数据集的场景中,如果正确使用结构,您可以获得不错的加速)。
  • 您需要浪费更少的内存并在数组中拥有大量结构化数据。尤其是与数组结合使用时,您可以通过结构节省大量内存。
  • 您正在大量使用指针。然后结构提供了许多有趣的特征。

关于c# - 什么时候结构比类好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1593221/

相关文章:

C# 检查图像是否具有公差

c# - ASP .NET Core IIS 托管用户身份名称为空且 IsAuthenticated=false

c# - 如何获取剪贴板粘贴通知并提供我自己的数据?

.net - 为 Entity Framework 安装Oracle Data Provider时的"access denied"

java - 在子类中调用父类方法

c++ - 数组与结构 C++

objective-c - NSClassFromString(MyClassName) 比调用 MyClass 的类函数

c# - windows service,Thread 和 Timer 哪个更好用?

c# - 使用反射的 Dapper 与 ADO.Net 哪个更快?

.net - VS2008 on Win7 64-Bit : Debugging a Windows Service