什么是对象创建?

时间:2015-07-29 16:52:39

标签: c#

我写了一些简单的代码。

class Customer
{
   public string FirstName;
   public string LastName;
}

class Worker
{
   public int Wage;
}

class Program
{
   Customer C = new Customer();
   C.FirstName = "James";
   C.LastName = "Cronin";
}

我知道它不会打印任何东西,因为没有任何方法。 但我无法理解以下代码。

Customer C = new Customer();

我知道new Customer用于创建Customer对象的实例,而C是一个对象引用变量,指向该对象在堆中的位置。 我得到C必须是引用类型以指向对象的位置,这就是我使用Customer类型的原因,因为类是引用类型。

但为什么C必须Customer变量? 我的意思是,因为C仅用于指向对象的位置,为什么C不能像Worker类这样的任何其他类?

3 个答案:

答案 0 :(得分:3)

正如已经说过的那样,因为c#是强类型的< - What does strongly typed means in .NET framework?

但这是一个小小的心灵实验。 只需考虑客户和内存中工人的规模。 工人有一个变量,客户有两个变量,所以他们可以"不能"#34;在记忆中大小相同。

如果你想摆脱这个宣言

Customer c = new Customer();

你可以很容易地说

var c = new Customer();

这不会改变记忆或IL中的一点,我不推荐它通常用于可读性(有时候它更具可读性)但是如果它是你的项目并且你对它很满意做吧。

可能需要注意的其他事项:假设我们有一个包含Customers的通用列表,并且您希望迭代它,您的程序知道对象的大小,并且可以简单地从一个对象跳转到另一个对象而不读取每个对象。

这些例子非常简单,但我希望你明白这一点。 你不能将一升牛奶放入空的500毫升橙汁中,而不会让人感到困惑

编辑: 由于我不是微软的员工,而且我对CLR的所有细节都没有洞察力,所以我对这些细节并不是很了解,但我想这很像是在Java中很多详细信息将放入程序的IL表示中。因此,您的类工作者具有不同的大小和不同的指针,其中包含与客户不同大小的不同变量。因此,当程序执行时,程序必须知道指向何处以及对象具有什么大小,以便它知道对象中的另一个对象或方法开始的位置。我猜你可以写一本关于这些东西的书,只是在它的顶部划伤。但是写了所有这些比它复杂得多:"这是一个指向对象的指针,这里有一个如此区别? " ;)

答案 1 :(得分:2)

对象基本上是根据蓝图分配和配置的内存块。

您的案例中的蓝图是Customer类,并且在执行Customer C = new Customer();行时会发生内存分配。

更多阅读MSDN

答案 2 :(得分:0)

variables.sort(mySort);