在C#中,我现在有一个名为myclass的类,
我正在创建一个这样的对象,
myclass myx = new myclass();
然后
myx = new myclass();
它没有给出任何错误,但这意味着......
答案 0 :(得分:6)
这意味着您正在创建另一个实例并将其分配给您的变量,有效地“放弃”您使用new创建的第一个实例。
垃圾收集器会知道在某个时候清理旧的垃圾收集器。您无法再访问它,因为您没有将其保存到另一个变量。
答案 1 :(得分:3)
这意味着你丢弃了第一个myclass实例并创建了一个新实例。可能还有其他代码与第一个代码之间的代码,例如将其添加到列表中。
答案 2 :(得分:1)
myclass myx = new myclass();
这一行有声明和初始化
但
myx = new myclass();
这只是先前声明的对象的初始化
如果您想要出现错误,请从代码中删除myclass myx = new myclass();
,哟肯定会收到错误。简而言之,new
关键字用于任何对象的初始化,但该对象必须首先声明,可以在同一行上完成,也可以在对象声明后的其他地方完成。
有关new
Go here
答案 3 :(得分:0)
在C#中,new关键字可以用作运算符或修饰符。
new operator用于在堆上创建对象并调用构造函数。 new modifier用于隐藏基类成员的继承成员。
在你的情况下,你有两次初始化myx
答案 4 :(得分:0)
myx
是对myclass
。
使用myclass myx = new myclass();
,您可以告诉您的引用myx
指向使用new myclass()
创建的对象。
由于引用是可重用的,当您编写myx = new myclass();
时,该引用(myx
)将停止指向myclass
的旧实例,现在指向您刚刚创建的新实例。
由于没有其他人指向旧的,垃圾收集器被激活(不是立即,但不要担心)并且从堆中删除旧的myclass
对象。
答案 5 :(得分:0)
您可能知道.Net语言中有两种不同类型的对象引用类型和值类型。(类vs结构).Net以不同方式管理每种类型。当您将引用类型设置为变量时,因为它的名称意味着对该对象的内存地址的引用保存在变量中,但是当您将值类型对象(诸如int,long和...之类的结构)设置为变量时,您实际上将值保存在变量中。 因此在这种情况下:
var a=new MyClass();
var b=a;
如果MyClass是一个类,a和b都指向内存中的同一个对象,否则它们都有不同的值,因此如果我们这样做:
a.Value=5;
a.Value == b.Value如果MyClass是引用类型将为true,如果它是值类型对象则为false 现在回答你的问题是你要将变量myx设置为MyClass的新引用(如果它是一个类),或者你在其中设置一个新的MyClass值(如果它是一个结构) 当你做这样的事情时,你会得到一些人们不再需要的东西(myx的旧设置),并且在下次GC尝试清理内存时会被垃圾收集。