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

c++ - 创建对新对象的引用

我刚刚学习 C++,遇到了以下难题:

作为一个 C++ 新手,我读过使用引用而不是指针(如果可能的话)通常是一个好主意,所以我试图尽早养成这个习惯。结果,我有很多具有一般形式的方法

现在,我想知道调用这些方法的最佳方法是什么。当然,每个调用都需要一个不同的对象作为参数传递,据我所知,创建它的唯一方法是 new 运算符,所以现在我正在执行以下操作:

虽然这种方法完全有效,但我想知道是否没有另一种已经建立的“c++ 方式”来做到这一点。

谢谢您的帮助!担

0 投票
15 回答
95417 浏览

c# - c#中的引用类型和值类型有什么区别?

几个月前有人问我这个问题,我无法详细解释。C#中的引用类型和值类型有什么区别?

我知道值类型是int, bool, float, etc 而引用类型是delegate, interface, 等等。或者这也是错误的吗?

你能用专业的方式给我解释一下吗?

0 投票
0 回答
128 浏览

c# - 当 Petzold 说 C# 的口头禅是“类是引用类型;结构是值类型”时,他是什么意思?

可能重复:
c#中引用类型和值类型之间的区别

Charles Petzold 在他的“.Net book zero”一书中写下了 C# Mantra“类是引用类型;结构是值类型”。它如何提供帮助,它的需求是什么,它是什么?

0 投票
4 回答
561 浏览

c# - c# 字符串是引用类型 - 为什么当我更改引用 A 的值时,引用 B 不会改变?

如果 .NET 中的字符串是引用类型,那么在下面的代码中,为什么 string1 更改后 string2 不更改为“hi”?

0 投票
5 回答
8716 浏览

c# - 在 VB.NET 和 C# 中传递字符串 ByVal

那么字符串是引用类型吗?我的理解是,即使您将字符串 ByVal 传递给方法,也会传递对堆中字符串的引用。

呜呜呜……

或者

我错过了什么?引擎盖下发生了什么?我敢打赌价值会改变....

0 投票
3 回答
9063 浏览

c# - Java是否区分值类型和引用类型

C# 区分了这两者。java是做相同的还是不同的?

0 投票
3 回答
1455 浏览

c# - 代码契约、空值检查和值/引用类型

更新帖子:为了避免混淆我在做什么和不做什么,我从根本上编辑了这篇帖子,以包含导致此问题的代码的完整示例。为了使这篇文章无论如何都可读,所有代码都贴在底部。


背景:

我正在编写一个流畅的测试界面(我知道它已经完成,但一半的目的是了解它是如何工作的......),我想myNumber用一个代码行来验证它在 3 到 10 之间

我想你可以通过阅读第二行看到它应该验证的内容。当然还有更复杂的测试用例...

为了启用.And语法,我引入了一个名为 的帮助器类型AndHelper,它由每个验证方法返回,并且具有一个And返回任何测试内容的属性。所以.And在前面的例子中,应该返回myNumber,所以我也可以测试另一个条件。

我正在使用代码合同,除此之外,我正在验证其中this一些扩展的参数是非空的。这就是导致我的问题的原因。


我的问题:

在我的代码上运行代码合同检查时,我收到一堆警告,例如ShouldBeA<T>无法验证非空要求。我试图通过AndHelper<T>使用两个类ReferenceAndHelper<T>和, 子类来解决这个问题StructAndHelper<T>,并且ReferenceAndHelper<T>具有应保证满足非空要求的合同。但是,这似乎不起作用。

每次我使用其中一个测试扩展时,都会收到两条警告消息。一个声明合同“实例!= null”无法验证,另一个声明位置。第一个指向我使用该方法的行(例如我的第一个示例中的第 2 行),第二个指向指定合同的行,// (1)在我的代码中标记为 。


我的代码:

请耐心等待,这篇文章的这一部分很长。我不知道发布大量代码的 SO 准则是什么(这仍然是相关的),但如果有更好的方法,请赐教。

请注意,本节中的代码不会导致此特定错误,但会限制解决方案。例如,我必须有一个AndHelper<T>不知道类/结构的类型(或子类)。

几个测试:

AndHelper<T>班级:

两个子类ReferenceAndHelper<T>

StructAndHelper<T>

0 投票
1 回答
11465 浏览

c# - 闭包中的变量捕获详解

我看过无数关于变量捕获如何引入变量以创建闭包的帖子,但是它们似乎都没有具体的细节,而是将整个事情称为“编译器魔法”。

我正在寻找一个明确的解释:

  1. 如何实际捕获局部变量。
  2. 捕获值类型与引用类型之间的差异(如果有)。
  3. 以及是否存在与值类型相关的装箱。

我更喜欢在值和指针方面的答案(更接近内部发生的事情的核心),尽管我也会接受一个涉及值和引用的明确答案。

0 投票
5 回答
2210 浏览

c# - 在 C# 中使用带有 `new` 运算符的值类型的困境

operator new()与引用类型一起使用时,实例的空间在堆上分配,引用变量本身放在堆栈上。除此之外,在堆上分配的引用类型实例中的所有内容都被清零。
例如这里是一个类:

在以下代码中:

p变量在堆栈上,并且Person(其所有成员)的创建实例在堆上。p.id将是0 并且p.name将是null。之所以会出现这种情况,是因为在堆上分配的所有内容都归零。

现在我感到困惑的是,如果我使用带有new运算符的值类型。例如,考虑以下结构:

现在我想知道 main 中的以下几行是做什么的:

在第一行someDate变量分配在堆栈上。正好是 12 个字节。
我的问题是第二行会发生什么?做什么operator new()?它只是将Date结构的成员清零还是在堆上分配空间?一方面,我不希望new在堆上分配空间,当然因为在第一行内存已经在堆栈上分配给结构实例。另一方面,我希望new在堆上分配空间并返回该空间的地址,因为这是new应该做的。也许这是因为我来自 C++ 背景。

然而,如果答案是:“当new与值类型一起使用时,它只会将对象的成员清零”,那么new运算符的含义有点不一致,因为:

  1. 与值类型一起使用时new,它只会将堆栈上的对象成员清零
  2. 与引用类型一起使用时new,它会在堆上为实例分配内存并将其成员归零

在此先感谢,
干杯

0 投票
4 回答
6204 浏览

.net - 使用引用类型成员定义结构是否有意义?

使用引用类型成员定义结构(而不​​是将其定义为类)有什么意义吗?例如,要定义这个结构:

我问是因为我知道结构是一种值类型,并且在其中定义一些引用类型没有任何意义。

我对吗?有人可以解释一下吗?