我写了一些简单的代码。
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
类这样的任何其他类?
答案 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)
答案 2 :(得分:0)
variables.sort(mySort);