构造函数:
与类名具有一样名称的成员函数是构造函数。构造函数不能有返回值,甚至不能有return语句。说明一个有返回值的构造函数是错误的,取构造函数的地址也是错误的。
如果一个类有构造函数,在程序中每个该类类型的对象在使用之前由此构造函数进行初始化。
构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用。构造函数往往执行一些初始化的操作。
构造函数是在对象的创建点上被调用的。创建对象可以是:
* 全局对象(文件范围或外部链接的)。
* 在一个函数或者小的封闭块中的局部变量。
* 用new运算符创建的动态对象。new操作在程序的堆或自由存储区中分配一个对象。
* 因显式调用构造函数而创建的临时对象(详见本章后面的“临时对象”)。
* 因编译器隐含调用构造函数而创建的临时对象(详见本章后面的“临时对象”)。
* 其它类的数据成员。在创建类类型的对象时,若此类类型由其它类类型变量组成,将会引起 该类中每个对象的创建。
* 一个类的基类子对象。创建派生类类型的对象时会引起基类构件的创建。
构造函数的作用:
构造函数的功能主要用于在类的对象创建时定义初始化的状态,它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有选择。二其他方法都有返回值,即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让他返回一些东西,而这些东西可能是不安全的。
一个构造函数执行各种任务,但对于程序员来说,这些任务是不可见的,你甚至可以不必为构造函数写任何代码。这些任务都同建立一个完全的、正确的类类型对象实例有关。
在MS C++中(同样也在很多其它C++中)一个构造函数:
* 初始化对象的虚拟基指针(vbptr)。如果该类是由虚拟基类派生出的,则这一步要执行。
* 按说明的顺序调用基类和成员的构造函数。
* 初始化对象的虚拟函数指针(vfptr)。如果该类有或者继承了虚拟函数,则这一步要执行,虚拟函数指针指向类的虚拟函数表(v-table),并且使虚拟函数的调用同代码正确绑定(binding)。
* 在构造函数体中执行可选的代码。
问:请问如何做到在构造函数里就销毁对象?
答:继承IDispose接口,并在构造函数中调用Dispose方法。只不过内存的释放和这个无关,完全由GC在管理。
方法参数关键字:params,ref,out
Params:用于指定在参数数目可变处,采用参数的方法参数。只能有一个params,并且在他后面不能再有参数。
~方法参数:如果在为方法声明参数是未使用ref或out,则该参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值
ref:使方法可以引用传递到该方法的参数。当程序跳转到调用方法处的时候,在方法中对参数所做的任何改动都将传递给参数。类似于传地址。
注意!!!必须将参数作为ref参数显示的传递到方法。参数必须显示的初始化!属性不是变量不能作为ref参数传递。
out:使方法可以引用传递到该方法的同一个变量。当程序跳转到方法调用处时,在方法中对变量所做的任何改动都将传递给该变量。
注意!!!当希望方法返回多个值时,声明out非常有用。一个方法可以有多个out参数。
必须将参数作为out参数显示的传递方法。不必初始化作为out参数的变量。属性不是变量不能作为out变量。
注意!!!ref参数必须显示初始化,而out参数不用。
C#关键字
abstract :可以和类、方法、属性、索引器及事件一起使用,标识一个可以扩展但不能被实体化的、必须被实现的类或方法。
as:一个转换操作符,如果转换失败,就返回null。
base : 用于访问被派生类或构造中的同名成员隐藏的基类成员。
catch :定义一个代码块,在特定类型异常抛出时,执行块内代码。参见try和finally。
checked :既是操作符又是语句。确保编译器运行时,检查整数类型操作或转换时出现的溢出。
const :标识一个可在编译时计算出来的变量值,即一经指派不可修改的值。
delegate :指定一个声明为一种委托类型。委托把方法封装为可调用实体,能在委托实体中调用。
Enum:表示一个已命名常量群集的值类型。
event :允许一个类或对象提供通知的成员,他必须是委托类型。
Explicit:一个定义用户自定义转换操作符的操作符,通常用来将内建类型转换为用户定义类型或反向操作。必须再转换时调用显示转换操作符。
extern :标识一个将在外部(通常不是c#语言)实现的方法。
finally :定义一个代码块,在程序控制离开try代码快后执行。参见try和catch。
Fixed:在一个代码块执行时,在固定内存位置为一个变量指派一个指针。
foreach :用于遍历一个群集的元素。
goto :一个跳转语句,将程序执行重定向到一个标签语句。
implicit :一个操作符,定义一个用户定义的转换操作符。 通常用来将预定义类型转换为用户定义类型或反向操作。隐式转换操作符必须在转换时使用。
interface :将一个声明指定为接口类型,即实现类或构造必须遵循的合同。
Internal:一个访问修饰符。
namespace :定义一个逻辑组的类型和命名空间。
operator :用来声明或多载一个操作符。
Out:标识一个参数值会受影响的参数,但在传入方法时,该参数无需先初始化。
params :声明一个参数数组。如果使用,必须修改指定的最后一个参数。允许可选参数。
readonly :标识一个变量的值在初始化后不可修改。
ref :标识一个参数值可能会受影响的参数。
Sealed:防止类型被派生,防止方法和property被覆载。
sizeof :一个操作符,以byte为单位返回一个值类型的长度。
stackalloc :返回在堆上分配的一个内存块的指针。
struct :struct是一种值类型,可以声明常量、字段、方法、property、索引器、操作符、构造器和内嵌类型。
throw :抛出一个异常。
try :异常处理代码块的组成部分之一。try代码块包括可能会抛出异常的代码。参阅catch和finally关键字。
typeof :一个操作符,返回传入参数的类型。
unchecked :禁止溢出检查。
unsafe :标注包含指针操作的代码块、方法或类。
using :当用于命名空间时,using关键字允许访问该命名空间中的类型, 而无需指定其全名。也用于定义finalization操作的范围。
virtual :一个方法修饰符,标识可被覆载的方法。
Volatile:标识一个可被操作系统、某些硬件设备或并发线程修改的attribute。
原文:http://www.cnblogs.com/1539136475-/p/4371982.html