2

我现在正在学习 C# refs。

假设所有分配有 new 的变量都是引用而不是值是否安全?

例子:

SomeType variable = new SomeType()
4

6 回答 6

4

不:

  • 类的实例是引用,但结构的实例是值。
  • 类和结构都可以使用 new 构造

例如,System.Drawing.Pointis a structnot a class

Point point = new Point(1, 1); //point is a value, not a reference
于 2009-05-14T04:35:14.683 回答
3

C# 有两种类型的对象 - 引用类型(使用 class 关键字定义)和值类型(使用 struct 关键字定义)。

  • RT 在托管堆上创建。当您在 RT 上执行 new() 时,您会返回对堆上对象的引用。两个 RT 变量可以指向同一个对象。
  • VT 在堆栈上创建(除非它们是引用类型中的字段)。当您在 VT 上执行 new() 时,您会得到一个指向堆栈上对象开头的变量。两个值类型变量不能指向同一个对象——它们总是堆栈上的两个不同对象。然而,这是一个实现细节,重要的是要记住 VT 具有值类型语义。

拿起一本关于 C# 的好书了解更多细节。它是一个重要的概念。

于 2009-05-14T04:37:02.463 回答
1

不,值类型不是引用。

但是对于任何其他非值类型和“ref/out”参数,它们都是引用。

于 2009-05-14T04:32:24.783 回答
1

不。在 C# 中,结构也使用 new() 进行实例化,但被视为值。

于 2009-05-14T04:32:50.477 回答
0

看起来您将引用与对象混淆了。如果是这种情况,那么使用 new 关键字创建的类型是对象。被视为值的结构除外。

于 2009-05-14T04:33:27.977 回答
0

不必要。随着您对 C# 的深入了解,您会发现有类(引用类型)和结构(值类型)。它们都通过使用'new'关键字来实例化,但结构的实例不是引用。

于 2009-05-14T04:33:56.557 回答