您好,欢迎来到刀刀网。
搜索
您的当前位置:首页C#中new关键字的理解

C#中new关键字的理解

来源:刀刀网

C#程序中,我们经常见到如:

Bitmappicture=new bitmap(curentfilepath);【Bitmap是一个类,用作图像处理】

Int[ ]arr=new int[10]; 【C#中声明一个数组,并且初始化,数组大小是10,每个初始默认值是0】

这样的语句,这和C和C++中的写法不一样,在C或者C++中我们声明一个数组是: int  arr[10];这样去声明的。

为什么会这样了,C# 中定义有些变量如:

intwidth=10;

可以直接赋值,而有些如:

Int [ ]arr=new int[10];

OpenFileDialog opnDlg = new  OpenFileDialog( );

这样去赋值了。

 

我先说一下C,C++和C#的简单的区别(个人理解,不好勿喷),

C: C是一组数据类型和函数;

C++: 是类和一组函数;

C#: 一组类型的声明;

写C# 程序的而过程感觉就是一个不断声明类型的过程,C#中预定义的类型有16中,其中13中是简单的类型,如我们常见的int ,short,double,float等,还有三种是稍微复杂的类型,如object, string。其中object是其他类型的基础,包括简单类。此外还有6中自定义的类型:

类类型(class)

结构类型(struct)

枚举类型(enum)

数组类型(array)

托管类型(delegate)

接口类型(interface)

写一个C#程序就是这22种类型不断声明变量的过程。

声明的类型。必须就对声明类型的变量分配内存,即实例化对象。为变量分配内存的时候分为两种类型:一种是值类型,一种是引用类型,数据在内存中一般存在栈和堆中。

值类型的数据只需要一段简单的类存,将其中数据存放在其中,比如我们声明时候的简单类型:

如 int a;存储时就是一个值类型,在内存中只需要分配一段单独的内存,此时变量a并没有赋值,内存中给一个默认值为0;如果在定义:a=10;那就将10这个值存储进去。其存储的位置可以位于栈中,也可以位于堆中。

可以用下面图来表示引用这个过程:


懂了上面的这些,那就很容易理解为啥在C#中对声明变量的赋值有些是如:int a=10;有些是 int [ ] arr=new int[10];这样形式了,前面那张赋值在内存中存储时值类型的,所以在内存中只需开辟一块地方便可以了。

在C#中,数组,类,结构等复杂的声明类型实例化时在内存中都是按照引用类型存储的。

所以如:

上面语句其实是两句:

Bitmap  image;

Image =newBitmap();

 

Bitmap是一个类类型,故其实例化过程中分配内存是按照引用类型分配的,所以,new Bitmap()分配的是存储数据的内存,

Bitmap  image 分配的是存储数据引用的内存;


因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务