什么是对象创建

本文关键字:创建 对象 什么 | 更新日期: 2023-09-27 18:05:37

我写了一些简单的代码。

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类?

什么是对象创建

正如已经说过的,这是因为c#是强类型的<——强类型在。net框架中意味着什么?

但这里有一个小的思维实验。只需考虑内存中客户和工作人员的大小。Worker有一个变量,而customer有两个,所以它们在内存中的大小"不可能"相同。

如果你想去掉这个声明

Customer c = new Customer();

你可以很容易地说

var c = new Customer();

这不会在内存或IL中改变一点,我通常不推荐这样做,因为可读性(有时它更可读),但如果这是你的项目,你对它很满意,那么就这样做。

也许还有一些事情需要记住:假设我们有一个包含Customers的泛型列表,你想迭代它,你的程序知道对象的大小,可以简单地从一个对象跳到另一个对象,而不需要读取每个对象。

这些例子很简单,但我希望你能明白。你不能把一升牛奶放进一个500毫升的空橙汁瓶子里而不避免有人混淆

编辑:由于我不是微软的员工,我对CLR的所有细节都不了解,所以我不能说太多细节,但我猜它很像java,其中大部分细节都放在程序的IL表示中。所以你的类工作者有不同的大小和不同的指针指向不同大小的变量,而不是客户。因此,当程序执行时,程序必须知道指向哪里以及对象的大小,这样它才能知道对象中的另一个对象在哪里,或者方法在哪里开始。我猜你可以写一本关于这些东西的书,然后在上面草草写一下。但写了这么多之后,它要复杂得多:"这里是指向对象的指针,这里是指向对象的指针,有什么区别?";)

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

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

MSDN上的更多阅读

  class Program
{
    static void Main(string[] args)
    {
        ClassB b = new ClassB()
        {
            PropclassA = new ClassA()
            {
                TestProp = 10,
            }
        };
        ClassB b1 = new ClassB();
        b1.PropclassA.TestProp = 100;
    }
}
class ClassA
{
    public int TestProp { get; set; }
}
class ClassB
{
    public ClassB()
    {
        PropclassA = new ClassA();
    }
    public ClassA PropclassA { get; set; }
}