OOP对象实例化

时间:2012-07-06 08:12:51

标签: c# oop object

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

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

myclass myx = new myclass();

然后

myx = new myclass();

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

6 个答案:

答案 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尝试清理内存时会被垃圾收集。