标签:
type //class 声明或者定义继承一个类class(TObject). TDate = class private fDate: TdateTime; Month, Day, Year: Integer; public //构造函数,如果定义了constructor,默认构造函数无效 constructor Create (y, m, d: Integer); constructor Create; overload; //Destructor用于标识析构函数, 析构函数在类被释放时自动调用.析构函数只允许覆盖, 再不允许重载 //Free时,会调用Destory,调用前会判断是否为nil,但是调用后不会将self置为nil,因为不知道本身是否被引用。 destructor Destroy;override; //procedure 无返回值 procedure SetValue (y, m, d: Integer); overload; //overload 重载 procedure SetValue (NewDate: TDateTime); overload; function LeapYear: Boolean; function GetText: String; procedure Increase; proceure Y; //虚拟函数,通C++相同,通过virtual table(VMT)来找到virtual函数入口,包含父类的VMT function Voice:String; virtual; //动态方法,结果和virtual相同,差别在于编译时候使用动态方发表(DMT), //子类使用唯一的数字+动态方法地址构成DMT,但是不包含祖先的DMT。所以运行时内存小,但是速度慢 //function Voice:String; dynamic; //抽象函数,同C++,抽象函数,不能定义实例 function Jump:String; virtual; abstract; //message方法可用于处理windows消息,可调用postMessage(TDateObj.hANDLE,wm_User, 0, 0); var是引用 procedure WMUser(var Msg: TMessage); message wm_User; //属性名 : 属性值类型 read 属性读函数/属性值变量 write 属性写函数/属性值变量,write属性可以省略,变成只读 property Year: Integer read GetYear write SetYear; end; constructor TDate.Create; begin Day:= 0; end; type TClassB = clas(TDate) public //父类可以访问子类方法 class procedure X; //和C++一样叫虚拟函数,和java一样有override关键字...... 必须父类函数是virtual,如果不是,是覆盖而不是刻意动态绑定 function Voice:String; override; end procedure TDate.GetYear; begin Result := YearOf(fDate); end; procedure TDate.Y; begin //Self访问当前对象,无参数方法可以省略() Self.X; end;
//is 判断类型 if obj is ClassB then xxxxx //as 类型转换 (obj as ClassB).do //异常处理 try…except…end; try…finally…end; //和try…except…end不同,该结构的finally部分总被执行 //不存在try…except…finally…end结构来既处理异常,又保护资源分配的结构 //允许如下结构,从而实现既处理异常,又保护资源的分配 try try…except…end finally end; //触发异常,类似C++ throw raise xxxException;
标签:
原文地址:http://www.cnblogs.com/zengyou/p/5842034.html