Delphi函数详解:全局函数,内部函数,类的成员函数,类的静态方法
1. Delphi中的全局函数
//要点: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
{需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面}
function MyFun(x,y: Integer): Integer; {函数声明}
var
Form1: TForm1;
implementation
{$R *.dfm}
function MyFun(x,y: Integer): Integer; {函数实现}
begin
Result := x + y;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i := MyFun(1,2); //注意此时MyFun()是个全局函数
ShowMessage(IntToStr(i)); {3}
end;
end.
2. Delphi中的内部函数---- unit中implementation区中的内部函数
//要点: implementation 区中的过程或函数, 只能在本单元调用
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{implementation 区中的过程或函数, 只能在本单元调用}
function MyFun(x,y: Integer): Integer; //此时这个函数仅供本unit调用
begin
Result := x + y;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i := MyFun(1,2); //注意此时MyFun()是个全局函数
end;
end.
3. Delphi中的内部函数---- Procedure/Function中的内部函数
//Delphi 支持过程中的方法
procedure TForm1.Button1Click(Sender: TObject);
procedure alert(s: string);
begin
ShowMessage(s);
end;
begin
alert('Hello');
end;
4. Delphi类的成员函数
//要点: 如果声明在 TForm1 类内, 那它就是 TForm1 类的一个方法了
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
function MyFun(x,y: Integer): Integer; {函数声明在 TForm1 类的体内}
{现在这个函数 MyFun 已经是 TForm1 类的一个方法了}
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{函数在实现区必须有 TForm1. 作为前缀}
function TForm1.MyFun(x,y: Integer): Integer;
begin
Result := x + y;
end;
{调用}
procedure TForm1.Button1Click(Sender: TObject); //相当于C++中TForm1::Button1Click();
var
i: Integer;
begin
i := MyFun(1,2);//类的实现内部当然可以调用类的方法MyFun()了
ShowMessage(IntToStr(i)); {3}
end;
end.
5. Delphi的类方法---类似于C++中类的静态方法
//类方法就是通过类名就可以访问的方法
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
{类方法示例:}
TMyClass = class(TObject)
class procedure alert(s: string); {类方法只是比静态方法多了一个 class 指示字}
end;
{
类方法不能在 private 和 protected 区;
类方法不能是虚方法;
类方法只能使用类中的、在对象实例化以前的数据.
}
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyClass }
class procedure TMyClass.alert(s: string);
begin
ShowMessage(s);
end;
{类方法可以直接使用}
procedure TForm1.Button1Click(Sender: TObject);
begin
TMyClass.alert('Hello world');
end;
{类的对象当然也能使用}
procedure TForm1.Button2Click(Sender: TObject);
var
MyClass: TMyClass;
begin
MyClass := TMyClass.Create;
MyClass.alert('Hello World');
MyClass.Free;
end;
end.
--------------------------------------------------------------------------------
//静态类方法
{现在的 Delphi 不仅仅有类方法, 同时有:
类变量: class var
类常量: class const
类类型: class type
类属性: class property
静态类方法就是给类属性来调用的, 它可以存在与私有区(private),
譬如下面的 SetName 就是一个静态类方法:
}
TMyClass = class(TObject)
private
class var FName: string;
class procedure SetName(const Value: string); static; {静态类方法又多了一个 static 指示字}
published
class property Name: string read FName write SetName;
end;
6. Delphi中指针函数参数
{现在这个函数并没有 var 前缀, 也就是说参数应该不会被修改的}
function MyFun(p: PInteger): Integer; {PInteger 是 Integer 的指针类型}
begin
p^ := p^ * 2;
Result := p^;
end;
{测试}
procedure TForm1.Button1Click(Sender: TObject);
var
i,x: Integer;
begin
i := 8;
x := MyFun(@i); {调用函数}
ShowMessage(IntToStr(x)); {16}
{现在 i 的值应该不会被修改, 但...}
ShowMessage(IntToStr(i)); {16}
{
没有 var 或 out 前缀的参数, 应该是传值的;
有 var 或 out 的参数是传地址的;
指针就是一个地址, 尽管没有指定传地址, 但事实上就是给了一个地址,
所以参数值也会改变!
}
end;
Delphi函数详解:全局函数,内部函数,类的成员函数,类的静态方法的更多相关文章
- Callback函数详解(我感觉,回掉函数的本质是函数指针,在业务做循环处理的时候,调用一下通知外部)
2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享.希望对大家有所帮助. 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度 ...
- sql server 函数详解(4)日期和时间函数
时间和日期函数第一部分 时间和日期函数第二部分
- Oracle中的substr()函数 详解及应用
注:本文来源于<Oracle中的substr()函数 详解及应用> 1)substr函数格式 (俗称:字符截取函数) 格式1: substr(string string, int a, ...
- mybatis中的mapper接口文件以及selectByExample类的实例函数详解
记录分为两个部分,第一部分主要关注selectByExample类的实例函数的实现:第二部分讨论Mybatis框架下基本的实例函数. (一)selectByExample类的实例函数的实现 当你启动项 ...
- javascript 函数详解2 -- arguments
今天我们接着上篇文章来继续javascript函数这个主题.今天要讲的是函数对像中一个很重要的属性--arguments. 相关阅读: javascript 函数详解1 -- 概述 javascrip ...
- kzalloc 函数详解(转载)
用kzalloc申请内存的时候, 效果等同于先是用 kmalloc() 申请空间 , 然后用 memset() 来初始化 ,所有申请的元素都被初始化为 0. view plain /** * kzal ...
- Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt
PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...
- ThinkPHP函数详解:session方法
ThinkPHP函数详解:session方法 Session方法用于Session 设置.获取.删除和管理操作. Session 用于Session 设置.获取.删除和管理操作 用法 sessi ...
- 【C语言】printf函数详解
C语言printf函数详解 一.相关基础知识 请求printf()打印变量的指令取决于变量的类型,例如打印整数用%d符号,打印字符用%c符号,这些符号称为转换说明(conversion specifi ...
随机推荐
- Java中Lambda表达式的简单使用
Lambda表达式是Java SE 8中一个重要的新特性.你可以把 Lambda表达式 理解为是一段可以传递的代码 (将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格 ...
- JS高级. 06 缓存、分析解决递归斐波那契数列、jQuery缓存、沙箱、函数的四种调用方式、call和apply修改函数调用方法
缓存 cache 作用就是将一些常用的数据存储起来 提升性能 cdn //-----------------分析解决递归斐波那契数列<script> //定义一个缓存数组,存储已经计算出来 ...
- 处理laravel表单提交默认将空值转为null的问题
比如表单提交,如果我们提交了这个字段,但是这个字段为空字符串.在Laravel中会自动转义成Null. 处理这个问题,直到找到中间件\vendor\laravel\framework\src\Illu ...
- hadoop生态搭建(3节点)-04.hadoop配置
如果之前没有安装jdk和zookeeper,安装了的请直接跳过 # https://www.oracle.com/technetwork/java/javase/downloads/java-arch ...
- JDK8新垃圾回收机制--G1垃圾回收机制
G1全称是Garbage First Garbage Collector,使用G1的目的是简化性能优化的复杂性.例如,G1的主要输入参数是初始化和最大Java堆大小.最大GC中断时间. G1 GC由Y ...
- 图解HTTP总结(8)——确认访问用户身份的认证
Session 管理及 Cookie 应用 基于表单认证的标准规范尚未有定论,一般会使用Cookie来管理Session(会话). 基于表单认证本身是通过服务器端的Web应用,将客户端发送过来的用户I ...
- libpng的使用
zlib 适用于数据压缩的函式库,由Jean-loup Gailly (负责compression)和 Mark Adler (负责decompression)开发. zlib被设计成一个免费的.通用 ...
- Python的scrapy之爬取boss直聘网站
在我们的项目中,单单分析一个51job网站的工作职位可能爬取结果不太理想,所以我又爬取了boss直聘网的工作,不过boss直聘的网站一次只能展示300个职位,所以我们一次也只能爬取300个职位. jo ...
- HTTP学习之HTTP基础
学习HTTP技术,首先要了解它的在web通信中有哪些特点,起到什么作用.有哪些规范.都有什么功能. HTTP的特点 HTTP使用的是一种可靠的.快速响应的数据传输协议,用户一旦发起请求,Web服务器可 ...
- 005---json & pickle
json & pickle 什么是序列化 序列化是指把内存里的数据类型转变成字符串,以便使其能存储在硬盘和网络传输.因为只能接收bytes类型. 为什么要序列化 持久化存储 分类 - json ...