c# - 什么是值类,什么是 C# 中的引用类?

标签 c# .net oop terminology

C#中值类引用类的定义是什么?

这与值类型引用类型有何不同?

我问这个问题是因为我在 MCTS 自定进度培训套件(考试 70-536)中读到了这个。第 1 章,第 1 课,第 4 课复习:

You need to create a simple class or structure that contains only value types. You must create the class or structure so that it runs as efficiently as possible. You must be able to pass the class or structure to a procedure without concern that the procedure will modify it. Which of the following should you create?

A reference class

B reference structure

C value class

D value structure

Correct Answer: D

A Incorrect: You could create a reference class; however, it could be modified when passed to a procedure.

B Incorrect: You cannot create a reference structure.

C Incorrect: You could create a value class; however, structures tend to be more efficient.

D Correct: Value structures are typically the most efficient.

最佳答案

您可能会想到 C++/CLI,它与 C# 不同,它允许用户声明“值类”或“引用类”。 在 C# 中,您声明的任何类都将隐式成为引用类——只有内置类型、结构和枚举具有值语义。 要了解 C++/CLI 中的值类,请查看此处: http://www.ddj.com/cpp/184401955

与引用类相比,值类的功能非常少,对“普通旧数据”很有用;也就是说,没有身份的数据。由于您在将一个对象分配给另一个对象时正在复制数据,因此系统为您提供了一个默认(且强制性)的复制构造函数,它只是将数据复制到另一个对象。

要将值类转换为引用类(从而将其放入垃圾收集堆),您可以将其“装箱”。

要确定您正在编写的类是其中之一,请问问自己它是否具有标识。这通常意味着它具有某种状态,或者具有标识符或名称,或者它自己的上下文概念(例如指向附近节点的节点)。

如果不是,它可能是一个值类。

然而,在 C# 中,值类被声明为“结构”。

关于c# - 什么是值类,什么是 C# 中的引用类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658985/

相关文章:

java - 扩展 JFrame 与在程序中创建它

c# - 我们可以使用 SignalR 在桌面应用程序中创建服务器吗?

C# 使用 Microsoft.Office.Interop.Excel 读取 Excel 单元格值

.net - 模型存储 edmx 文件不会在 Debug模式下生成,但会在 Release模式下生成

c# - 使用 C# 检测二维空间中的光投影和交叉点

c# - 如何在javascript中定义公共(public)和私有(private)属性

c# - C# 的 SNI 证书支持

c# - 使用 C# 在一个特定屏幕上锁定鼠标移动

c# - 检测程序集是否以普通 .Net、CF 或 Silverlight 为目标的最简单方法是什么?

javascript - 在其他类中注入(inject)类