对C#中用new关键字实例化对象的理解

【前置知识】

对值类型和引用类型的理解

公共语言运行时CLR

对C#数组声明方式的理解

【实例化格式】

类名  对象名 = new 类名 (参数列表)

【相关概念辨析】

是模板,定义了对象在实例化的时候看起来像什么样子。

对象是类的一个实际的例子,简称实例。

实例化是从类创建对象的过程。

举例而言:类可以看做是图纸,我们根据这个图纸做出来一个东西(即对象),做出来的东西就是图纸的实例,做这个东西的过程将类实例化了。

【实例化的过程】

以MyClass  myClass = new MyClass()为例:

MyClass是自定义的类(即自己写的一个类),myClass是要创建的对象名(即实例化的对象)。

new关键字的作用是让CLR为对象分配内存并返回引用(即new关键字告诉CLR我这边要创建一个对象,你那边要在堆中找块地方存储创建这个对象所需要的数据,创建好了之后再告诉我你是在堆中哪个位置创建的)。

(注解:实例化对象时需要初始的数据,正如我们声明数组时要给初始值一样,而且这些数据需要有专门的地方来存储。另外,存储之后还需要知道在哪存储的,要不然等需要用这些数据的时候不知道在哪找。)

所以,new MyClass()会返回引用,通过“=”操作符将引用赋值给myClass,而myClass本身可能在栈中,也可能在堆中,无论myClass在哪,其中存储的都是引用,而不是数据本身。

末尾的()表示用 MyClass这个类的构造器对myClass这个对象进行初始化,即构造器决定了创建这个对象时需要哪些初始数据。

【拓展】

在声明实例化数组时,其格式跟我们声明自定义的类是一样的,如

int[] A = new int[3];

int[] 可以看做是一个类,C#内置的、预定义的类。同样的,int、string 、float也可以看做是类,以下声明的方式都是可以的。

            int x = new int();//给了初始值0
            x = 3;//自己赋值
            float y=new float();//给了初始值0.0
            y=3.0f;//自己赋值
        

另一方面,int、float本身也是基础的数据类型,其作为类时使得自然界中的数据得以在计算机中表示。

【参考】

[1]《C#本质论5.0》

【相关链接】

对C#构造器的理解

你可能感兴趣的:(C#)