-1

在 C# 中,我现在有一个名为 myclass 的类,

我正在创建一个这样的对象,

myclass myx = new myclass();

然后

myx = new myclass();

它没有给出任何错误,但这意味着什么......

4

5 回答 5

6

这意味着您正在创建另一个实例并将其分配给您的变量,有效地“放弃”您使用 new 创建的第一个实例。

垃圾收集器会知道在某个时候清理旧的。您不能再访问它,因为您没有将它保存到另一个变量。

于 2012-07-06T08:16:11.507 回答
3

这意味着您正在丢弃第一个 myclass 实例并创建一个新实例。可能还有其他代码在处理第一个代码,例如将其添加到列表中。

于 2012-07-06T08:15:46.067 回答
1

myclass myx = new myclass();这一行有声明和初始化

myx = new myclass();这只有一个先前声明的对象的初始化

如果你想要一个错误然后myclass myx = new myclass();从你的代码中删除,你肯定会得到一个错误。简而言之new,关键字用于任何对象的初始化,但必须首先声明该对象,这可以在同一行完成,也可以在对象声明后的其他地方完成。

有关new 转到此处的更多信息

于 2012-07-06T08:15:53.937 回答
0

您可能知道 .Net 语言中有两种不同类型的对象,引用类型和值类型。(类与结构).Net 以不同的方式管理每种类型。当您将引用类型设置为变量时,它的名称意味着对该对象的内存地址保存在变量中,但是当您将值类型对象(诸如 int 、 long 和 ... 的结构)设置为变量时,您实际上将值保存在变量中。因此在这种情况下:

var a=new MyClass();
var b=a;

如果 MyClass 是一个类,a 和 b 都引用内存上的同一个对象,否则两者都有不同的值,因此如果我们这样做:

a.Value=5;

如果 MyClass 是引用类型,a.Value==b.Value 将为真,如果它是值类型对象,则为假现在回答您的问题,您是否将变量 myx 设置为 MyClass 的新引用(如果它是类)或者您正在其中设置 MyClass 的新值(如果它是一个结构)当您执行此类操作时,您将拥有不再需要的东西(myx 的旧设置)并且将在下次 GC 时被垃圾收集试图清理内存。

于 2012-07-06T08:29:53.783 回答
0

myx是对您的实例(对象)的引用myclass

随着myclass myx = new myclass();你告诉你的引用myx指向一个用new myclass().

由于引用是可重用的,当您编写 时myx = new myclass();,该引用 ( myx) 停止指向 的旧实例,myclass现在指向您刚刚创建的新实例。

由于没有其他人指向旧对象,因此垃圾收集器被激活(不是立即激活,但不要担心)并将旧myclass对象从堆中删除。

于 2012-07-06T08:19:50.883 回答