实例化对象C#

时间:2014-05-13 18:13:50

标签: c# instantiation

Dude car = new dude(name="honda", year=1998);

Dude park = new Dude(name="blah", year=1996);

car=park;

我是OOP的新手,我有时会看到这些参考变量设置为彼此相等,即使它们具有不同的值。也许我误解了一些事情。可以解释为什么你要设置一个彼此相等的对象吗?

5 个答案:

答案 0 :(得分:5)

我会假设Dude是一个类,而不是结构。

  

可以解释为什么要将对象设置为彼此相等吗?

你没有设置"一个彼此相等的对象"。

您有两个变量carpark,每个变量都能够指向类型{的 对象 {1}}。

然后,您创建一个名为" honda"的新Dude并使变量Dude指向它。您为car做了类似的事情。

最后一行的作用是使park变量指向与car相同的对象。 现在你有两个变量指向一个名为" blah"的家伙,并且没有指向名为" honda"的家伙的变量。

答案 1 :(得分:0)

让我们区分“对象”和“变量”。我们这里有两个类型Dude对象 - 第一个用“honda”和1998初始化,第二个用“blah”和1996.这些是对象,在内存中分配,与该课程中涉及的所有逻辑。

现在,您还有两个变量。第一个名为“汽车”,第二个“公园”。首先,变量“car”最初指向“honda”对象,变量“park”指向“blah”对象。

你的第三行更改了赋值,所以现在“car”和“park”都指向“blah”对象,并且没有变量指向“honda”对象。现在无论您是访问car.name还是park.name,都可以从同一个对象获得相同的值。垃圾收集器最终将拾取未引用的对象。

答案 2 :(得分:0)

您没有将对象设置为彼此相等,而是将一个设置为等于另一个。赋值运算符(=)将左侧设置为等于右侧,丢失该行之前左侧的值。

答案 3 :(得分:0)

变量可以是原始类型,如intclass es的实例,指向object,如String。您可以将变量的值分配给另一个变量,这在很多情况下都很有用。例如,您可能有一个名为class的{​​{1}},其中包含User字段。当有人登录时,他会输入username和密码,您希望修改username对象的状态,使其User字段(也是string)名为object的{​​{1}}包含您输入的username。稍后,您可以获得username的{​​{1}},因为其字段将保存username作为输入值。

答案 4 :(得分:0)

当您编写car = park;时,car的初始值将永远丢失,因为指向它没有任何内容,垃圾收集器将收集它以清除您的内存。现在两个变量指向对象park的相同值。你问为什么要两个变量指向同一个对象?好吧,我想不出目前的好例子,但也许你想在同一个变量上初始化新对象(例如,因为你喜欢变量的名称),你也想保留旧的对象。在这种情况下,在创建new对象之前,您需要指向您的实例的其他相同类型的对象。这样你就不会丢失对象的引用,也不会永远丢失。