问题标签 [reference-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 回答
1636 浏览

c# - .NET 字符串和引用类型参数

以下代码如何工作?

如果两者StringBuilder都是String引用类型,为什么字符串对象在通过AppendBar方法传递时没有改变,而 StringBuilder 对象在传递给AppendFoo方法时改变,因为方法的两个参数都将引用类型作为参数?

0 投票
3 回答
7417 浏览

c# - 在 C# 中存储引用

我正在尝试设计一个类,它可以在销毁时更新对对象(类外)的引用。

所以本质上你创建了这个对象的一个​​实例并传递给它一个引用类型(以任何方式,构造函数等),然后在对象销毁时,原始引用已更改为由对象创建的引用。

如果我通过引用传递引用(例如在构造中),我无法找到一种方法来存储这个引用(作为引用)以供析构函数更新它?例如(伪):

这里的关键是我不想从这个类中改变原始的“外部”对象,我想“重新指向”它,或者如果你愿意的话将它初始化。

0 投票
2 回答
841 浏览

.net - C++/CLI:本机参考与跟踪参考

以下两个函数有什么区别?

0 投票
4 回答
8049 浏览

c# - 为什么引用类型没有初始化为 null?

检查此代码..

编译器为此代码抛出此错误

使用未分配的局部变量“str”

为什么引用类型未初始化为 null ?

只是出于好奇想知道。

我也想知道下面的代码会发生什么。这个任务是如何工作的?

0 投票
5 回答
326 浏览

c# - 参考问题:两个对象何时相等?

我有一个 Vector 类,我正在测试以下单元测试(使用 nUnit)。

第 3 行的第一个测试通过,但第 5 行的第二个测试失败。既然我在第 2 行做了赋值语句,那么 test2 不应该也指向与 test1 相同的内存吗?我的 Vector 被定义为一个类,所以它是一个引用类型。另一方面,以下测试通过:

这是否意味着,当我使用 new 运算符定义新对象时,旧分配不再有效?任何其他(或正确的 - 如果我错了)解释?

0 投票
8 回答
1620 浏览

.net - 在 C# 中,术语“原始”和“文字”可以互换吗?

今天早些时候的一次讨论让我质疑我对原语和文字的理解是否正确。


我的理解是,文字类型特别是一种可以使用人类和编译器都可以理解的符号分配值的类型,而无需特定的类型声明:


我对原语的理解是,它们本质上是编译器可以理解的元素数据类型,比如 int:


...文字可以是非原始的,例如 VB9 对 XML 文字的支持。一个非现实世界的例子是如果 System.Drawing.Point 可以用文字分配:


最后(这个问题反过来又导致我提出上述问题):我的理解是,一个类型是原始类型还是文字类型,与它是值类型还是引用类型没有直接关系。

例如 System.String 是一种支持文字的引用类型。自定义结构是不支持文字的复合值类型。

我的理解(如果不是我的解释)在很大程度上是正确的吗?


更新:感谢伟大的信息和对话!对于任何发现此问题的人,请务必阅读评论和答案,这里有一些很好的说明以及一些有趣的旁注。

顺便说一句:哪个答案真正值得获得绿色大支票是一个折腾。我将其提供给不幸被否决的答案,该答案不仅包含一个不错的答案,而且在评论线程中包含许多澄清和信息。公平地说,这里没有一个最佳答案,至少有三个:)

0 投票
8 回答
16360 浏览

c# - 不带 ref 关键字的引用传递

我不是套接字编程的老手,所以在分析我在数据库 API 中找到的代码时,我遇到了这段代码

我理解位移我不理解的是,当 args 中没有ref或没有返回时,'buffer' var 如何不断获取值。位移以某种方式编辑缓冲区的实际值?

0 投票
6 回答
19381 浏览

java - 为什么java有“String”类型而不是“string”?

Wrapper 类很好,它们的目的也很好理解。但是为什么我们要省略原始类型呢?

0 投票
6 回答
10629 浏览

c# - .NET 参数传递 - 按引用与按值传递

我试图验证我对 C#/.NET/CLR 如何处理值类型和引用类型的理解。我读了很多自相矛盾的解释,我仍然

这是我今天的理解,如果我的假设是错误的,请纠正我。

值类型(例如 int 等)存在于堆栈中,引用类型存在于托管堆中,但是如果引用类型具有例如 double 类型的实例变量,它将与它的对象一起存在于堆中

第二部分是我最困惑的。

让我们考虑一个名为 Person 的简单类。

Person 有一个名为 Name 的属性。

假设我在另一个类中创建了一个 Person 实例,我们将其称为 UselessUtilityClass。

考虑以下代码:

然后我们做的某处:

Person 是一个引用类型,当传递给 UselessUtilityClass - 这是我要去的地方 - 坚果......作为 Person 引用实例的VARIABLE p 由VALUE传递,这意味着当我写 p.Name 我会看到“牧师_”

然后如果我写

我愿意

p2.Name = "不是牧师";

并像下面这样写 p 的名字我会得到“不是牧师”

这是因为它们是引用类型并且指向内存中的相同地址。

我的理解正确吗?

我认为当人们说.NET 中的所有对象都由 Reference 传递时存在一些误解,这与我的想法并不相符。我可能是错的,这就是我来到 Stackers 的原因。

0 投票
6 回答
17224 浏览

c# - Guid 被认为是值类型还是引用类型?

Guid 是使用new关键字创建的,这让我认为它是一种引用类型。

它是否正确?

Guid uid = new Guid();

Guid 是否存储在堆上?