问题标签 [value-type]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
269 浏览

c# - 除了为什么 System.String 是引用类型而不是值类型的性能和可读性之外,还有其他原因吗?

为什么 String 被设计为引用类型而不是值类型?

从建模的角度来看,我会将它建模为一个值类型,因为它代表了没有身份的东西。它没有区别属性。(例如,我无法区分一个字符串“a”和另一个字符串“a”)

我知道如果将长字符串存储在堆栈中,我会遇到严重的性能问题。可能这是不可能的,因为字符串会变得很长,因为堆栈的大小是有限的。

如果不是为了性能,为什么要将 System.String 设计为引用类型?(假设任何可能的字符串最长为 16 个字节)

0 投票
2 回答
98 浏览

.net - .NET 结构概念问题

为什么结构中不需要构造函数?

为什么 GC 不删除结构?

0 投票
3 回答
277 浏览

c# - 寻找一种更优雅的方式来检查可空值类型

为了检查一个值类型是否可以为空,我目前正在做这样的事情:

有没有更优雅的方法来做到这一点?

0 投票
1 回答
803 浏览

vb.net - 我可以在 vb.net 结构中定义赋值运算符吗?

我的结构实际上是一个具有更多功能的简单字节。

我是这样定义的:

我想拥有这两个功能:

有没有办法做到这一点?

如果有一种从结构继承的方法,我只需从字节继承添加我的功能,基本上我只需要一个具有自定义功能的字节结构。

当您想定义新的单例成员值类型(例如,您想定义一个半字节类型等)并且您希望能够通过分配给数字或其他语言来设置它时,我的问题也是有效的类型化的表示。

换句话说,我希望能够定义以下 Int4 (nibble) 结构并按如下方式使用它:

0 投票
1 回答
269 浏览

.net - 从哪里可以获得 CTS 层次结构?接口类型在 CTS 层次结构中的位置

它说基本上有两种类型 1)值类型和引用类型。所有值类型都来自 system.valuetype

  1. 有什么类似的吗system.referencetype,因为我看到的每个 CTS 层次结构都显示以下两种类型system.objects,aValuetype和 a Referencetype。我的理解是从 system.objects 派生的所有类型,除了system.valuetype参考。这个对吗 ?

  2. 接口类型在层次结构中的位置。有些图表是独立显示的,但在某些图表中属于参考类型。

  3. 从哪里可以获得实际的 CTS 层次图?

0 投票
4 回答
908 浏览

c# - 引用和值类型方案

我一直在尝试彻底理解 Reference 和 Value 类型。就在我以为我有它的时候,我遇到了这个场景......

我创建了一个包含单个对象的类。

当我创建此 Container 类的实例时 (a) 我正在创建引用类型的实例。我为类中的对象分配了一个整数。据我所知,这将被装箱为一个对象,另一种引用类型。

我创建了 Container 类 (b) 的另一个实例,但是将第一个容器的值分配给它,b 的值现在是对 a 的引用。

正如预期的那样,当我打印出 aA 和 bA 的值时,它们是相同的。

而且,正如预期的那样,当我更改 aA 的值时,bA 的值也会因为它们引用同一个对象而发生变化。

现在我决定尝试使用单个本地对象。同样,我将整数装箱到第一个对象中,并将第一个对象的值分配给第二个对象。我相信此时的对象应该是引用类型,因此 c 和 d 应该引用同一个对象。在不更改任何内容的情况下,它们返回相同的值。

和以前一样,在更改初始对象的值时,我希望两个对象的值相同。

当我打印这两个对象的结果时, d 的值不会像以前那样改变。

有人可以解释为什么在这种情况下的分配与以前的不同吗?

谢谢

0 投票
5 回答
1833 浏览

c# - Java 7 中会包含结构和值类型(如 C#)吗?

Java 7 中会包含结构和值类型(如 C#)吗?

0 投票
3 回答
142 浏览

c# - 当 C# 和 CLI 带有值类型和构造函数时,有什么区别?

我最近读到 C# 和 CLI 标准定义了处理值类型和构造函数的不同方法。

根据 CLI 规范,值类型不能有无参数构造函数,而在 C# 规范中,值类型有默认的无参数构造函数。如果根据 CLI 规范,您需要在不指定任何参数的情况下创建值,则可以使用特殊指令来执行此操作。

所以我的问题是

  • 为什么 C# 设计者会故意偏离 CLI 标准——这样做有什么好处,为什么 CLI 不允许这个功能?
  • 在我有限的经验中,每当我发现自己使用“特殊指令”来实现最初不打算使用的功能时,这通常是一种黑客行为。这有什么不同?
0 投票
1 回答
224 浏览

c# - 具有动态字段数的 C# 值类型

解释我的问题的最好方法是使用代码片段:

我们在任何地方都使用这种类型,就好像它是一种值类型。即我们假设:

不会影响a,因为这就是我们习惯谈论向量的方式(如果作为结构实现,具有固定数量字段的向量的行为方式也是如此)。

然而,由于这个假设是错误的,它导致了一些极其微妙的错误。

我想知道是否有一种方法可以使其表现为值类型,而不仅仅是将Resource每个成员扩展为它们自己的成员 a (如果我们希望添加另一个,则struct ResourceVector需要触摸每个成员)。ResourceVectorResource

哦,以防万一,我们正在使用 C# 2.0。所以没有花哨的功能:-)

谢谢。

0 投票
5 回答
234 浏览

c# - .Net 中条件运算符的奇怪行为

这让我很困惑。也许我现在太累了。

inputArea 是一个可为空的矩形,在我的特定情况下为空。

前两个语句产生一个初始化为 0 的cropArea。然而,第二个语句根据图像的宽度和高度产生正确的cropArea。我对条件运算符有什么误解吗?inputArea = null 时似乎不返回矩形?使用值类型时是否有任何怪癖?

编辑:好的,我应该先尝试一下:重新启动 VS。似乎调试器对我撒了谎,或者其他什么。无论如何,现在工作。谢谢。