在delphi中怎么表示和使用静态的变量 谁知道如何在Delphi中实现C语言中静态变量的功能

Delphi\u4e2d\u600e\u4e48\u6837\u5b9a\u4e49\u9759\u6001\u53d8\u91cf

A\u7a97\u4f53\u7c7b\uff1a
...
//\u5b9a\u4e49\u5217\u8868\u4e3a\u5168\u5c40\u9759\u6001\u53d8\u91cf
public static List Data=new list(100);
...
B\u7a97\u4f53\u7c7b\uff1a
...
//\u8bbf\u95ee\u5217\u8868\u503c
foreach (string n in aaa)
{
Console.WriteLine(A.Data[n]);
}
...
\u9759\u6001\u53d8\u91cf\u4e0e\u975e\u9759\u6001\u53d8\u91cf\u7684\u533a\u522b\u5982\u4e0b\uff1a
1.\u5185\u5b58\u5206\u914d
\u9759\u6001\u53d8\u91cf\u5728\u5e94\u7528\u7a0b\u5e8f\u521d\u59cb\u5316\u65f6\uff0c\u5c31\u5b58\u5728\u4e8e\u5185\u5b58\u5f53\u4e2d,\u76f4\u5230\u5b83\u6240\u5728\u7684\u7c7b\u7684\u7a0b\u5e8f\u8fd0\u884c\u7ed3\u675f\u65f6\u624d\u6d88\u4ea1\uff1b
\u800c\u975e\u9759\u6001\u53d8\u91cf\u9700\u8981\u88ab\u5b9e\u4f8b\u5316\u540e\u624d\u4f1a\u5206\u914d\u5185\u5b58\u3002
2.\u751f\u5b58\u5468\u671f
\u9759\u6001\u53d8\u91cf\u751f\u5b58\u5468\u671f\u4e3a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b58\u5728\u5468\u671f\uff1b
\u975e\u9759\u6001\u53d8\u91cf\u7684\u5b58\u5728\u5468\u671f\u53d6\u51b3\u4e8e\u5b9e\u4f8b\u5316\u7684\u7c7b\u7684\u5b58\u5728\u5468\u671f\u3002
3.\u8c03\u7528\u65b9\u5f0f
\u9759\u6001\u53d8\u91cf\u53ea\u80fd\u901a\u8fc7\u201c\u7c7b.\u9759\u6001\u53d8\u91cf\u540d\u201d\u8c03\u7528\uff0c\u7c7b\u7684\u5b9e\u4f8b\u4e0d\u80fd\u8c03\u7528\uff1b
\u975e\u9759\u6001\u53d8\u91cf\u5f53\u8be5\u53d8\u91cf\u6240\u5728\u7684\u7c7b\u88ab\u5b9e\u4f8b\u5316\u540e\uff0c\u53ef\u901a\u8fc7\u5b9e\u4f8b\u5316\u7684\u7c7b\u540d\u76f4\u63a5\u8bbf\u95ee\u3002
4.\u5171\u4eab\u65b9\u5f0f
\u9759\u6001\u53d8\u91cf\u662f\u5168\u5c40\u53d8\u91cf\uff0c\u88ab\u6240\u6709\u7c7b\u7684\u5b9e\u4f8b\u5bf9\u8c61\u5171\u4eab\uff0c\u5373\u4e00\u4e2a\u5b9e\u4f8b\u7684\u6539\u53d8\u4e86\u9759\u6001\u53d8\u91cf\u7684\u503c\uff0c\u5176\u4ed6\u540c\u7c7b\u7684\u5b9e\u4f8b\u8bfb\u5230\u7684\u5c31\u662f\u53d8\u5316\u540e\u7684\u503c\uff1b
\u975e\u9759\u6001\u53d8\u91cf\u662f\u5c40\u90e8\u53d8\u91cf\uff0c\u4e0d\u5171\u4eab\u7684\u3002
5.\u8bbf\u95ee\u65b9\u5f0f
\u9759\u6001\u6210\u5458\u4e0d\u80fd\u8bbf\u95ee\u975e\u9759\u6001\u6210\u5458\uff1b
\u975e\u9759\u6001\u6210\u5458\u53ef\u4ee5\u8bbf\u95ee\u9759\u6001\u6210\u5458\u3002

\u800c\u5728C\u8bed\u8a00\u4e2d\u5728\u5b9a\u4e49\u5c40\u90e8\u53d8\u91cf\u65f6\u53ef\u4ee5\u7528static\u6765\u5b9a\u4e49\u9759\u6001\u53d8\u91cf\uff0c\u8be5\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fd0\u884c\u4e2d\u7684\u503c\u4e00\u76f4\u53ef\u4ee5\u4fdd\u7559\uff0c\u53ef\u4ee5\u4e3a\u7a0b\u5e8f\u5b9e\u73b0\u7279\u6b8a\u7684\u529f\u80fd\u3002\u4f46Delphi\u5374\u6ca1\u6709\u8fd9\u4e00\u529f\u80fd\uff0c\u5982\u679c\u4e3a\u5b9e\u73b0\u8fd9\u4e00\u529f\u80fd\u7528\u5168\u5c40\u53d8\u91cf\u663e\u7136\u4f1a\u7834\u574f\u7a0b\u5e8f\u7684\u5c01\u88c5\u6027\uff0c\u662f\u4e0d\u53ef\u53d6\u7684\u3002\u5176\u5b9e\u8fd9\u4e00\u529f\u80fd\u5728Delphi\u4e2d\u4e5f\u662f\u53ef\u4ee5\u901a\u8fc7const\u5b9a\u4e49\u5e38\u91cf\u7684\u65b9\u6cd5\u6765\u53d8\u901a\u5b9e\u73b0\u8fd9\u4e00\u529f\u80fd\u3002\u5e38\u91cf\u672c\u6765\u662f\u4e0d\u5141\u8bb8\u5728\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u4fee\u6539\u7684\uff0c\u5982\u679c\u60f3\u8981\u4fee\u6539\u5b83\u4eec\u7684\u503c\uff0c\u6709\u4ee5\u4e0b\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u5b9e\u73b0\uff1a\u4e00\u3001\u901a\u8fc7{$J}\u7684\u5f00\u5173\u6765\u63a7\u5236\u7f16\u8bd1\u5668\u662f\u5426\u5141\u8bb8\u7a0b\u5e8f\u4fee\u6539\u5e38\u91cf\u6839\u636eDelphi\u7684\u5e2e\u52a9\u6587\u6863\u63cf\u8ff0\uff1a$J\u6307\u4ee4\u63a7\u5236\u662f\u5426\u5141\u8bb8\u5b9a\u4e49\u4e3a\u5e38\u91cf\u7684\u503c\u662f\u5426\u5141\u8bb8\u88ab\u4fee\u6539\u3002\u5728{$J+}\u72b6\u6001\uff0c\u5b9a\u4e49\u7684\u5e38\u91cf\u53ef\u4ee5\u88ab\u4fee\u6539\uff0c\u5e38\u91cf\u5728\u6b64\u65f6\u76f8\u5f53\u4e8e\u4e00\u4e2a\u53ef\u4ee5\u88ab\u521d\u59cb\u5316\u6570\u503c\u7684\u53d8\u91cf\u3002\u5728{$J-}\u72b6\u6001\u5b9a\u4e49\u7684\u5e38\u91cf\u662f\u771f\u6b63\u7684\u5e38\u91cf\uff0c\u4efb\u4f55\u5c1d\u8bd5\u5bf9\u5e38\u91cf\u7684\u4fee\u6539\u90fd\u4f1a\u4f7f\u7f16\u8bd1\u5668\u62a5\u9519\u3002\u5177\u4f53\u793a\u4f8b\u5982\u4e0b\uff1a{$J+}procedure TForm1.Button1Click(Sender: TObject);
const i:integer=100;
begin i:=i+100;
showmessage(inttostr(i));end;{$J-}\u9700\u8981\u8bf4\u660e\u7684\u662f\uff0c\u65e9\u671f\u7684Delphi\u6216PASCAL\u7248\u672c\uff0c\u5e38\u91cf\u90fd\u662f\u53ef\u5199\u7684\uff0c\u76f8\u5f53\u4e8e{$J+}\u72b6\u6001\uff0c\u4ee5\u524d\u7684\u6e90\u4ee3\u7801\u5728\u4f7f\u7528\u53ef\u5199\u5e38\u91cf\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u65f6\u5fc5\u987b\u4f7f\u7528{$J+}\u8fdb\u884c\u7f16\u8bd1\u3002\u4e8c\u3001\u901a\u8fc7\u6307\u9488\u6765\u5b9e\u73b0\u6b64\u529f\u80fd\u901a\u5e38\u7528Delphi\u6765\u5199\u7a0b\u5e8f\u5f88\u5c11\u4f1a\u7528\u5230\u6307\u9488\uff0c\u5176\u5b9eDelphi\u7684\u6307\u9488\u529f\u80fd\u548cC\u8bed\u8a00\u7684\u6307\u9488\u529f\u80fd\u4e00\u6837\u7684\u5f3a\u5927\uff0c\u6b64\u5904\u4e0d\u505a\u8fc7\u591a\u8bb2\u8ff0\u3002\u5982\u679c\u60f3\u8981\u4fee\u6539\u5e38\u91cf\u7684\u503c\u7684\u8bdd\uff0c\u53ef\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u6307\u9488\u53d8\u91cf\uff0c\u4f7f\u7528\u6307\u9488\u6307\u5411\u6b64\u5e38\u91cf\u7684\u5730\u5740\uff0c\u7136\u540e\u901a\u8fc7\u6307\u9488\u6765\u4fee\u6539\u5e38\u91cf\u3002\u5177\u4f53\u793a\u4f8b\u5982\u4e0b\uff1a procedure TForm1.Button1Click(Sender: TObject);
const i:integer=100;
var p:PInteger;
begin p:=@i;
P^:=p^+100;
end;\u5982\u679c\u4e0d\u662f\u51fa\u4e8e\u4f7f\u7528\u9759\u6001\u53d8\u91cf\u7684\u76ee\u7684\uff0c\u5efa\u8bae\u6700\u597d\u4e0d\u8981\u4f7f\u7528\u4ee5\u4e0a\u4e24\u79cd\u65b9\u6cd5\uff0c\u66f4\u4e0d\u8981\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\u6765\u6539\u53d8\u5168\u5c40\u5e38\u7684\u503c\uff0c\u90a3\u6837\u4f1a\u5bf9\u7a0b\u5e8f\u5e26\u6765\u707e\u96be\u6027\u7684\u540e\u679c\u3002\u5fc5\u987b\u4f7f\u7528\u7684\u8bdd\uff0c\u5efa\u8bae\u4f7f\u7528\u7b2c\u4e00\u79cd\u65b9\u6cd5\uff0c\u4f7f\u7528\u5b8c\u540e\u5e94\u5c3d\u5feb\u4f7f\u7528{$-}\u6765\u5173\u6389\u6539\u5199\u5e38\u91cf\u529f\u80fd\u3002

delphi 语言中,通常使用 const 关键字来定义声明一个静态常量,如果想使“静态常量”变成“静态变量”,对于 C++ 之类的语言可以使用 static 作为关键字指示声明,而在 delphi 里,通过 {$J+} 和 {$-} 编译指示字变通声明一个静态变量。

以下关于这两个指示字的说明资料:



以下用编写的静态变量的两个应用场合实例代码来说明,在 delphi 语言中,怎么表示和使用静态的变量:


1、静态局部变量

function TForm1.StaticTest(str: string): string;
{$J+}
const StaticCount: Integer = 0;//定义可修改的静态常量,作为累加器
{$J-}
begin
  StaticCount := StaticCount + 1;
  Result := str + ' ' + IntToStr(StaticCount);
end;

//局部静态变量测试
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s: string;
begin
  for i := 1 to 10 do
  begin
    s := StaticTest('运行次数: ');
  end;
  ShowMessage(s);
end;


运行代码截图:


注意代码中,并没有进行 StaticCount 的累加,而结果显示为 10。



2、类静态变量


先定义一个包含静态常量的类:


type
  TMyClass = class
     NormalVal: string;
     {$J+}
     const staticVar: string = '原始常量值';
     {$J-}
  end;


再编写测试代码:


//类静态变量测试
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  s: string;
  MyClass1,MyClass2: TMyClass;       //声明两个TMyClass的实例
begin
  MyClass1 := TMyClass.Create;       //构造 MyClass1
  MyClass1.NormalVal := 'MyClass1';  //普通类变量赋值

  ShowMessage(MyClass1.staticVar + '  ' + MyClass1.NormalVal);

  MyClass2 := TMyClass.Create;       //构造 MyClass2
  MyClass2.NormalVal := 'MyClass2';  //普通类变量赋值

  ShowMessage(MyClass2.staticVar + '  ' + MyClass2.NormalVal);

  //给 MyClass1 中的静态变量赋值
  MyClass1.staticVar := '由 MyClass1 做了修改赋值';

  //注意下面代码中,显示的是 MyClass2 中的成员
  //MyClass2 中的 staticVar 并没有进行修改
  //作为对比,注意同时显示的 MyClass2 中的普通变量,并没有变动
  s := 'MyClass2.staticVar 的值(静态): ' + MyClass2.staticVar + #13#10 + #13#10 +
       'MyClass2.NormalVal 的值(普通): ' + MyClass2.NormalVal;

  MessageBox(Handle, PChar(s), '信息提示', MB_OK + MB_ICONINFORMATION);
end;


代码运行截图:





  • 鍦╠elphi涓庝箞琛ㄧず鍜屼娇鐢闈欐佺殑鍙橀噺
    绛旓細1銆侀潤鎬佸眬閮ㄥ彉閲 function TForm1.StaticTest(str: string): string;{$J+}const StaticCount: Integer = 0;//瀹氫箟鍙慨鏀圭殑闈欐佸父閲忥紝浣滀负绱姞鍣▄$J-}begin StaticCount := StaticCount + 1; Result := str + ' ' + IntToStr(StaticCount);end;//灞閮ㄩ潤鎬佸彉閲忔祴璇昿rocedure TForm1.Button...
  • delphi涓鍙橀噺鍜屽父閲鎬庝箞浣跨敤
    绛旓細ProductName = "Delphi";璞″彉閲忎竴鏍凤紝甯搁噺涔熸湁绫诲瀷銆備笉鍚岀殑鏄紝甯搁噺鍋囪鍏剁被鍨嬪氨鏄父閲忚鏄庝腑鍏舵墍浠h〃鐨勫肩殑绫诲瀷銆備笂鏂囩殑涓変釜甯搁噺鐨勭被鍨嬪垎鍒槸real鍨嬨佹暣褰佸瓧绗︿覆鍨嬨傚父閲忕敤鈥= " 琛ㄧず涓よ竟鐨勫兼槸鐩哥瓑鐨勩傝鏄垜娌¤閿欑殑璇濅竴鑸父閲忓拰鍙橀噺鐨勭敵鏄庨兘鏄湪begin涔嬪墠鐨勶紝璋冪敤鐨勮瘽鐩存帴鐢ㄥ彉閲忓悕鍜屽父閲忓悕...
  • delphi 涓 鎬庝箞琛ㄧず骞朵笖
    绛旓細鍦╠elphi涓涓嶄竴鏍风殑锛屽叏鏄敤鑻辫鐨勮瘝璇潵琛ㄧず锛屽锛氫笌锛歛nd,鎴:or,闈:not鈥︹︿綘澶氱湅鐪嬩功灏卞叏鏄庣櫧鐨勩傘
  • DELPHI鍩虹鏁欑▼:Delphi鑷畾涔夐儴浠跺紑鍙(浜)[4]
    绛旓細Delphi涓墍鏈夋爣鍑嗕簨浠剁殑鍚嶇О閮戒互 On 寮澶 杩欏彧鏄嚭浜庢柟渚 缂栬瘧鍣ㄥ苟涓嶅己鍒跺畠 Object Inspector鏄湅灞炴х被鍨嬫潵鍐冲畾灞炴ф槸鍚︽槸浜嬩欢 鎵鏈夌殑鏂规硶鎸囬拡灞炴ч兘琚湅浣滀簨浠 骞跺嚭鐜板湪浜嬩欢椤典腑 鈶 璋冪敤浜嬩欢 涓鑸鏉 鏈濂藉皢璋冪敤闆嗕腑鍦ㄤ簨浠朵笂 灏辨槸璇村湪閮ㄤ欢涓垱寤轰竴涓櫄鏂规硶鏉ヨ皟鐢ㄧ敤鎴风殑浜嬩欢澶勭悊杩囩▼鍜屾彁渚涗换浣曠己鐪佸鐞 褰撹皟鐢ㄤ簨...
  • 鍦―elphi涓庢牱琛ㄧず鍥炶溅鍜屾崲琛屽瓧绗
    绛旓細1銆佺洿鎺ョ敤 # + 鏁板瓧 鏉ヨ〃绀 鍦 delphi 璇硶閲岋紝鍙互鐩存帴鐢 # + 鏁板瓧 鐨勫舰寮忔潵琛ㄧず涓涓瓧绗︼紝鍥犳锛屽彲浠ョ敤 #10浠h〃鎹㈣绗︼紝#13浠h〃鍥炶溅绗︺2銆佷娇鐢 Chr 鍑芥暟 Chr 鍑芥暟鍙互閫氳繃缁欏畾鐨勬暟鍊兼潵杩斿洖涓涓瓧绗︾粨鏋滐紝鍥犳锛屼篃鍙互濡備笅琛ㄧず锛欳hr(10) 浠h〃鎹㈣绗 Chr(13) 浠h〃鍥炶溅绗 ...
  • 濡備綍鍦―elphi涓娇鐢璧勬簮鏂囦欢
    绛旓細鍦―elphi涓娇鐢璧勬簮鏂囦欢 1銆佸湪杩愯澶刡rcc32 *.rc鍙敓鎴愪緵delphi浣跨敤鐨剅es鏂囦欢 2銆佸紩鍏es鏂囦欢 绋嬪簭浠g爜 implementation {$R *.dfm} {$R Tank.res} procedure TForm1.Button1Click(Sender: TObject);var bmp: TBitmap;begin bmp := TBitmap.Create;bmp.LoadFromResourceName(HInstance, 'TankBar')...
  • DELPHI涓鍐掑彿鍜岀瓑鍙鎬庝箞鐢?鎴戞柊鎵
    绛旓細delphi涓 鏉′欢鍒ゆ柇鏃剁洿鎺ョ敤= 璧嬪兼椂鐢:= 澹版槑鏃跺欑敤:澶ф嫭鍙风敤begin..end 瀛楃涓茬敤'渚嬶細function form1.yyy(test:string);var a:integer;begin a := 2;if a = strtoint (test) then showmessage('delphi');end;
  • delphi涓VBspcript_TRegExp绫(姝e垯琛ㄨ揪寮)鎬庝箞鐢
    绛旓細Matches = regEx.test(strng) 鎵ц鎼滅储,matches鏄竷灏斿 CheckExp = matches End Function 鍦ㄨ繖娈电▼搴忕▼搴忎腑,鎴戜滑鐪嬪埌鍙互浣跨敤鈥淣ew RegExp鈥濇潵寰楀埌涓涓鍒欒〃杈惧紡瀵硅薄,鐒跺悗瀵硅繖涓璞¤繘琛屾鍒欏尮閰嶆ā鏉鐨璧嬪,涔熷氨鏄憡璇夋鍒欒〃杈惧紡瀵硅薄,浣犳兂瑕佸尮閰嶄竴涓粈涔堟牱瀛愮殑妯℃澘,鐒跺悗浣跨敤鏂规硶Test鏉ユ娴嬪緟澶勭悊鐨勬暟鎹┒绔熷拰鎴戜滑缁欏嚭...
  • delphi涓,$0F $F0 绛夌瓑鏄粈涔堟剰鎬?
    绛旓細涓銆鍦―elphi涓$琛ㄧず鍚庨潰鐨勬暟鏄崄鍏繘鍒舵暟銆傚崄鍏繘鍒舵暟鐨勪綅浠0~F鍙栧硷紝A~F琛ㄧず鍗佽繘鍒剁殑10~15銆傜N浣嶇殑鏉冩槸16^(N-1)銆備緥濡傦細$02=2 $08=8 $10=16 $20=32 $30=48 $100=256 ...浜屻佸湪Delphi涓璦nd琛ㄧず[浣嶈繍绠梋涓殑鈥滀笌鈥濄傚嵆灏嗕袱涓搷浣滄暟鍙栧叾浜岃繘鍒讹紝姣忎竴浣嶄笂鐨勬暟杩涜鈥滆嫢鏄袱鑰呯殕...
  • mapx鍦―elphi涓鐨浣跨敤
    绛旓細涓銆鍦╠elphi 涓宓屽叆mapx鎺т欢 鍦╠elphi涓巑apx瀹夎瀹屾垚浠ュ悗锛屽惎鍔╠elphi閫夋嫨component鈥斻媔mport activex control鍦ㄥ脊鍑虹殑瀵硅瘽妗嗕腑閫夋嫨mapinfo mapx v4.0锛岀劧鍚庨紶鏍囧崟鍑籭nstall鍗冲彲锛屽氨鍙互鍦╠elphi涓鐨刟ctive鎺т欢鏍忎腑鎵惧埌杩欎釜鎺т欢銆備簩銆佸湴鍥炬暟鎹澶勭悊 鐢ㄤ簬mapx鎿嶄綔鐨勫湴鍥惧繀椤讳笌mapinfo professional鐩哥粨鍚堬紝鐢卞悗鑰...
  • 扩展阅读:一键免费文字转换 ... delphi语言用于哪些方面 ... delphi xe11 ... delphi语言怎么读 ... 简繁转换器 ... delphi为什么被替代 ... borland delphi ... delphi翻译 ... delphi语言被淘汰了吗 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网