c# - 我们应该使用结构来表示数据,使用类来表示行为吗?

标签 c#

文章中Active Record vs Objects鲍勃·马丁指出:

  • Object hide data and expose behavior
  • Data structures expose data and has no behavior

然后他继续说

In languages like C++ and C# the struct keyword is used to describe a data structure with public fields.

对我来说,他似乎使用数据结构作为 struct 的同义词,并说我们应该使用 struct 关键字来表示数据,使用 class 关键字来实现具有行为的对象。这听起来很奇怪,因为 mutable structs are evil大多数系统中的数据需要改变(这意味着大多数数据是邪恶的)。

有人可以指出我推理中的缺陷吗?

最佳答案

Bob 对事件记录提出了很好的观点,但他决定混合使用 struct 关键字(与概念相对)有点令人困惑。

首先,重要的是要了解 struct 在 C# 和 C++ 中的含义完全不同。

以下是差异的粗略解释:

在 C# 中,关键字 struct 用于定义自定义值类型。关于此类型的唯一是它总是按值传递给方法(与通过引用传递的引用类型相反。换句话说,当您将值类型传递给方法时,实际上会传递它的副本,并且方法内部副本的任何更改在方法外部都不可见。

在 C++ 中,类和结构几乎相同。结构本质上是一个类,默认情况下所有成员都是公共(public)的。

因此,当您谈论可变结构的邪恶属性时,请记住这仅涉及 C#,与 Bob 所谈论的内容无关。主要问题是违反语义和使用它们时出现非常奇怪的错误,但这是另一个问题的讨论。

关于c# - 我们应该使用结构来表示数据,使用类来表示行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131382/

相关文章:

c# - 在 visual studio 2010 中使用 c# 将 dicom 文件发送到远程 AE

C# 读取字节数组

c# - 更多 Controller 但操作更少或 Controller 更少但操作更多

c# - 如何在 ASP.Net webapp 中的引用项目 DLL 中初始化 AutoMapper 配置文件

c# - DataGridTextColumn 百分比宽度

c# - Unity Raycast 问题

c# - 使用 SIMD 内部函数时这些额外的反汇编指令是什么?

c# - 支持循环依赖的拓扑排序

c# - 如何以二进制模式打开文件并替换十六进制字符串?

c# - 如何将表情符号从 bot 发送到 Microsoft 团队中的用户