文章中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/