Delphi中的各种方法类型简介
2010-05-24 11:15
309 查看
在Delphi中有4种方法类型,分别是:static(静态), virtual(虚), dynamic(动态) 以及message(消息处理)。
先建立示例对象如下:
type
Foo = class
procedure IAmAStatic;
procedure IAmAVirtual; virtual;
procedure IAmADynanic; dynamic;
procedure IAmAMessage(var M : TMessage); message WM_SomeMessage;
end;
1.静态方法: IAmAStatic
静态方法是缺省类型,类似如常规的过程和函数。静态方法的执行速度最快。
静态方法不能被覆盖,无法实现多态性。
2.虚方法: IAmAVirtual
虚方法的调用方法和静态方法一样,而且可以被覆盖。
虚方法执行速度较快,但是消耗内存较多。
3.动态方法: IAmADynanic
动态方法是具有不同调度机制的虚方法。
动态方法与虚方法想比占用内存较少,但是速度稍慢。
4.消息处理方法: IAmAMessage
消息处理方法通常用于创建对Windows消息的响应。
以下将简单介绍方法的覆盖和重载。
1.覆盖:
type
FooChild = class(Foo)
procedure IAmAVirtual; override;
procedure IAmADynanic; override;
procedure IAmAMessage(var M : TMessage); message WM_SomeMessage;
end;
2.重载:
type
TSomeClass = class
procedure AMethod(I : Integer); overload;
procedure AMethod(S : String); overload;
procedure AMethod(D : Double); overload;
end;
最后再简单介绍一下reintroduce和self关键字的用法。
1.reintroduce:
在极少数的情况下,我们可能打算加入一个方法到自己的类中,从而完全取代祖先类中的同名方法。注意,这不是一个覆盖的行为。
这时我们可以使用reintroduce关键字,不然编译器会作出"新方法隐藏积累里某个方法"的提示。
例如:
type
TSomeBase = class
procedure Cooper;
end;
TSomeClass = class(TSomeBase)
procedure Cooper; reintroduce;
end;
2.Self:
在所有对象方法中都有一个隐藏的self变量,其指向调用该方法的类实例的指针。
先建立示例对象如下:
type
Foo = class
procedure IAmAStatic;
procedure IAmAVirtual; virtual;
procedure IAmADynanic; dynamic;
procedure IAmAMessage(var M : TMessage); message WM_SomeMessage;
end;
1.静态方法: IAmAStatic
静态方法是缺省类型,类似如常规的过程和函数。静态方法的执行速度最快。
静态方法不能被覆盖,无法实现多态性。
2.虚方法: IAmAVirtual
虚方法的调用方法和静态方法一样,而且可以被覆盖。
虚方法执行速度较快,但是消耗内存较多。
3.动态方法: IAmADynanic
动态方法是具有不同调度机制的虚方法。
动态方法与虚方法想比占用内存较少,但是速度稍慢。
4.消息处理方法: IAmAMessage
消息处理方法通常用于创建对Windows消息的响应。
以下将简单介绍方法的覆盖和重载。
1.覆盖:
type
FooChild = class(Foo)
procedure IAmAVirtual; override;
procedure IAmADynanic; override;
procedure IAmAMessage(var M : TMessage); message WM_SomeMessage;
end;
2.重载:
type
TSomeClass = class
procedure AMethod(I : Integer); overload;
procedure AMethod(S : String); overload;
procedure AMethod(D : Double); overload;
end;
最后再简单介绍一下reintroduce和self关键字的用法。
1.reintroduce:
在极少数的情况下,我们可能打算加入一个方法到自己的类中,从而完全取代祖先类中的同名方法。注意,这不是一个覆盖的行为。
这时我们可以使用reintroduce关键字,不然编译器会作出"新方法隐藏积累里某个方法"的提示。
例如:
type
TSomeBase = class
procedure Cooper;
end;
TSomeClass = class(TSomeBase)
procedure Cooper; reintroduce;
end;
2.Self:
在所有对象方法中都有一个隐藏的self变量,其指向调用该方法的类实例的指针。
相关文章推荐
- Android打开各种类型的文件方法总结
- JS方法中,网页各种类型宽度(高度)获取
- Linux各种类型压缩包解压缩方法
- Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧
- ExtJs--15--Ext.is*各种类型判断的方法,简单看源码就可以明白了
- jquery获取对象的方法足以应付常见的各种类型的对象
- Android打开各种类型的文件方法总结
- C#中各种数据类型转换的方法的类
- NAT原理简介、各种 ADSL Modem 及路由器的端口映射方法
- matlab各种数据类型的文件的读取与写入方法
- 总结-不同类型,各种求小数位2位的方法
- 关于java各种类型转化为无符号和类型转化为byte数组的方法
- 采用Lists.UpdateListItems方法更新列表项各种类型值的写法
- NSLog打印各种类型数据的方法
- Delphi的5种方法类型
- 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
- Python数据类型方法简介一————字符串
- 0c中各种数据类型的转换方法
- (转载一些资料) Android打开各种类型的文件方法总结..........
- (转)OC各种数据类型之间的转换方法