delphi一些不是很重要的技巧

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正好相反

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值