Delphi 系统[6]关键字和保留字 var、 threadvar、 const、 resourcestring、absolute
Delphi 系统[6]关键字和保留字 var、 threadvar、 const、 resourcestring、absolute
1、定义:
- var :声明变量,或者声明函数的参数为传址参数。
- const :声明常量,或者声明函数的参数为常量参数。
- resourcestring :声明资源字符串。
- threadvar :声明一个线程内变量,此变量仅供各个线程内部使用。如果在线程外初始化该变量,则初始化的内容不会被传入线程内,当线程创建时,该变量为空,且被认为是线程内的私有变量,与线程外的该变量互不干扰,与其它线程内的该变量也互不干扰。
- threadvar 必须声明为全局变量,然后在各个线程内使用。
- 在线程内使用的 threadvar 必须在线程结束前手动释放其占用的空间。
- 比如 S := ''; 即将字符串资源释放。关于资源释放,Delphi 没有更多解释。
- absolute :定义一个变量与另一个变量地址相同。您可以创建与另一个变量位于同一地址的新变量。为此,在新变量的声明中,将指令absolute放在类型名称之后,后跟现有(先前声明的)变量的名称。
2、示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { 关于变量、常量、资源的声明 } procedure TForm1 . Button1Click(Sender: TObject); resourcestring rsBCap = '测试TaoRoy(&G)' ; { 声明资源字符串 } const conMax = 10 ; { 声明常量 } var {声明变量 } iNum: Integer ; bFlag: Boolean ; begin Button1 . Caption := rsBCap; Randomize; //初始化 iNum := Random( 11 ); bFlag := iNum >= conMax; Caption := IntToStr(iNum) + ' - ' + BoolToStr(bFlag, True ); end ; |
threadvar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | { 关于 threadvar 和 var} unit Form1Unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Forms, Dialogs, StdCtrls; type TForm1 = class (TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end ; var Form1: TForm1; implementation {R *.DFM} { NOTE: 将GlobalStr 的定义由 var 改为 threadvar 来观察不同 } var { 线程内外共用此变量 } // threadvar { 线程内将创建此变量的一个副本,线程内外此变量互不干扰 } GlobalStr: string ; type TTLSThread = class (TThread) private FNewStr: String ; protected procedure Execute; override; public constructor Create; overload; constructor Create( const ANewStr: String ); overload; end ; procedure SetShowStr( const S: String ; const sTitle: string = '' ); begin if S = '' then MessageBox( 0 , PChar (GlobalStr), PChar (sTitle), MB_OK) else GlobalStr := S; end ; constructor TTLSThread . Create; begin inherited Create( False ); end ; constructor TTLSThread . Create( const ANewStr: String ); begin FNewStr := ANewStr; inherited Create( False ); end ; procedure TTLSThread . Execute; begin FreeOnTerminate := True ; SetShowStr(FNewStr); SetShowStr( '' , '线程内 - 线程执行时' ); end ; procedure TForm1 . Button1Click(Sender: TObject); begin SetShowStr( '线程外的 GlobalStr 变量' ); SetShowStr( '' , '线程外 - 线程创建前' ); TTLSThread . Create( '线程内的 GlobalStr 若为 threadvar 类型,则与线程外的GlobalStr 无关' ); Sleep( 100 ); SetShowStr( '' , '线程外 - 线程创建后,观察GlobalStr 在线程内外是否不同' ); end ; end . |
absolute:
1 2 3 4 5 6 7 8 9 10 11 | { 定义一个同地址变量 absolute } { 下面的代码声明了变量sLen 的起始地址与 ShortStrig 型变量 sStr相同,由于 ShortString 的第 0 个位置保存了字符串的长度,所以 sLen 的值即为字符串的长度值。 } {注意:不能在 absolute 声明中初始化变量,也不能将 absolute 与任何其他指令组合。} procedure TForm1 . Button1Click(Sender: TObject); var sStr: ShortString ; sLen: Byte absolute sStr; begin sStr := '1234567890' ; Caption := IntToStr(sLen); //输出:10 end ; |
创建时间:2021.08.11 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
分类:
Delphi A基础
标签:
Delphi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报