C#程序或DLL的源码是一组类型的声明
类:类型是一种模板,可以把类型想象成一个用来创建数据结构的模板。模板本身并不是数据结构,但它详细说明了该模板构造的对象的特征。
命名空间:它是一种把相关的类型声明分组并命名的方法。既然程序是一组相关的类型声明,那么通常会把程序声明在创建的命名空间内。
对于可执行程序,类型声明中必须有一个包含Main方法。
下面是.Net中预定义的类型:
堆和栈
对于.Net平台来说内存中使用堆栈的概念来存放数据。
栈是一个内存数组,是一个LIFO(last-in First-out 后进先出)的数据结构。
栈中存储的数据类型:值类型数据,引用类型的地址, 程序当前的执行环境,传递给方法的参数。
栈的特征:数据只能从栈的顶端插入和删除,把数据放到栈顶称为入栈(Push),从栈顶删除数据称为出栈(POP),因此可以把栈想像成一个水杯。
栈桢
当一个方法被调用时,在栈顶分配了一块内存用于保存一定数据与方法相关的数据项,这块内存叫方法的栈桢。
栈桢中存放的数据有:返回地址(就是方法退出时在哪里继续执行)、分配内存的参数(就是方法的值参数)、方法调用相关的其他各种管理数据项。
当方法被调用时,它的整个栈桢被压入栈中,方法退出时,它的整个栈桢从栈中弹出。弹出一个栈桢有时也称为释放栈。
堆
与栈不同,堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据,堆里的内存可以任意顺序存入和移除。但不能的删除它们。
CLR的自动GC(Garbage Collector,垃圾收集器)在判断出程序的代码将不会再访问某数据项时(该引用类型没有任何引用时),自动清除无主的堆对象。
堆中一般存放的是引用类型的实际数据而栈存放的是值类型。
值类型:只需要一段单独的内存,用于存储实际的数据。(因栈是一个内存数据,存放一些占用空间比较小的数据)
引用类型:它需要两段内存,1存储实际的数据,它总是位于堆中,2是一个引用,指向数据在堆中的存放位置。
对于一个引用类型,其实例的数据部分始终存放在堆里。
对于一个值类型对象,或引用类型数据的引用部分可以存放在堆里,也可以存放在栈里,这依赖于实际环境。
类:以程序的角度来说程序的数据和功能组织为逻辑上相关的数据项和函数的封装集合,称之为类。
类:以现实的角度来说对某些事物共同性的抽象的描述。
类是一个能存储数据并执行代码的数据结构,类的每个实例都是不同的实体。
变量:当声明定义变量,其内部完成了两件事:1.给变量命名,并为它关联一种类型。2让编译器为它分配一块内存。
常量:(Const)通常是一个预定义简单类型或期组成的表达式。它还可以是Null引用,但它不能是某对象的引用,因为对象的引用是在运行时决定的。常量中是不能重新赋值的。
参数:
形参:是声明在方法的参数列表中而不是方法体中的本地变量。
实参:当代码调用一个方法时,形参的值必须在方法的代码开始执行之前初,初始化。
值参数:(传值)数据通过复制实参的值到形参的方式传递到方法。
引用参数:(传地址)使用Ref修饰符,实参必须是变量,在用作实参前必须被赋值。
输出参数: 使用out修饰符,用于方法体内把数据传出到调用代码,它们非常类似引用参数。每个输出参数在方法读取、返回之前必须被赋值,这就意味着参数的初始值是无关的。
参数数组:允许零个或多个实参对应一个特殊的形参,在一个参数列表中只能有一个参数数组,并且它必须是列表中最后一个。使用(Params)修饰符。
如果数组参数是值类型,那么值被复制,实参不受方法内部的影响。
如果数组参数是引用类型,那么引用被复制,实参引用的对象受到方法内部的影响。