您的位置:首页 > 编程语言 > Delphi

delphi一些不是很重要的技巧

2011-08-07 00:29 190 查看

delphi一些不是很重要的技巧

1.把整型指针转换字符指针

var a:^integer; 是声明一個integer的指针 而不是一個integer

差別在var b: integer ; delphi會幫你準備一個位置來存這個數字,並且有一個指针來指到這個數字

希望下面的sample能將我的意思更容易理解

var a:^integer; //声明一個數字型態的指针A, 這種寫法編譯器沒有自動幫你生一塊實體儲存數字的記憶體

b:integer; //声明一個數字(取得一個實體儲存數字的变量 & 這塊变量體的指针B)

begin

b := 3; // 將3存到實體儲存數字的記憶體中

a := @b; //將A = 3的指標针也就是B)

ShowMessage(IntToStr( b));

a^ := 10; // 將a指向的記憶體,也就是原來B所指的實體儲存數字的記憶體內容改成10

ShowMessage( IntToStr(a^));

ShowMessage(IntToStr( b)); //當然B也就變成10

我认为最好还是不要把一个整型指针转换成字符串指针,这样会引起内存混乱!

2. 集合和枚举有什么区别,什么时候使用集合,何时使用枚举?

枚举类型里面的值都是自己定义的,一旦定义之后他们之间就有了一种顺序关系

type

Season= (spring, summer, autumn, winter );

上面的season类型的值:spring\summer\autumn\ winter 默认有一个顺序关系,分别是0、1、2、3,当然也可以自己给他指定顺序,例如

type

Season=(spring=3,summer=6,autumn=25, winter);

此时顺序就是后面的值,而winter默认是26。在同一个program中同一个值不能被定义到两个不同的每局类型中。

----------------------------

集合就简单的多了

type setEx=set of boolean;

就表示一个boolean类型的集合,取值只能在True和False之间选区。

一个set可以在使用过程中增加或者删除变量

include

exclude

来操作...

多选一 用枚举

可以选多个 用集合

3.继承(inherited)的用法?

是指一个新的对象能够从父对象中获取属性和方法,这种概念能用来建立vcl这样的多层次的对象,首先建立通用对象,然后创建这些通用对象的有专用功能的字对象。继承的好处是能共享代码。

多继承是指一个对象能继承两个不同的对象,并且包含有两个父对象的所有数据和代码,object pascal采用两种方法解决:在一个类中包含其它的类;使用接口。

继承的方法必须是虚拟或是动态方法。在4p中,private中的方法和属性不能被派生类继承,例如;

type

TQueryThread = class(TThread)

protect

Constructor Create;

public

procedure Execute;override;//覆盖基类的方法;此方法在基础类中的声明为virtual类型;

end;

constructor TQueryThread.Create;

begin

FreeOnTerminate := True;

inherited Create(False);//继承基础类中的方法;

end;

procedure TQueryThread.Execute;

begin

do something;

end;

static 表示是静态方法;静态方法是方法的缺省类型,不能被覆盖;

virtual 表示是虚拟方法;

dynamic 表示是动态方法;

这两类方法的共同点是都可以被覆盖(override),区别仅在于运行时调用方法时的派发机

制,virtual方法为执行速度做了优化,而dynamic方法则为代码大小做了优化;经常被覆盖的

方法应该定义为virtual方法;

message 表示是消息处理方法;在关键字message后面的值指明了这个方法要响应的消息;

用消息处理方法来响应Windows的消息,这样就不用直接来调用它;

override 表示是覆盖方法;要求祖先类中必须有该方法的定义,并且参数的顺序和类型

及返值的类型必须匹配;用于扩展祖先类中的该方法而不是取代它(如不调用祖先类中的该方

法则等同于取代);

overload 表示是重载方法;用于一个类中有许多同名的方法带着不同的参数表的情形;

(属性的读写方法不能被重载);

abstract 表示是抽象方法;是没有实现的方法,并且必须是virtual或dynamic方法,即

在abstract前面必须有virtual或dynamic关键字,其实现部分在派生类中;如

procedure DoSomething; virtual; abstract;

reintroduce表示是重新声明的方法;用于方法的名称与祖先类中的某个方法名称相同的情形;

virtual 和 dynamic定义的虚函数,都是为了子类override用的,

只不过它们的实现不一样

vitrual 占用的空间大点,但速度快些。dynamci正好相反
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: