Delphi 類的靜態屬性 (轉)
Because not prov static member for our using, so if you want a static
member of class in Delphi what should I do ?
Ok! At least there are three ways to implement this.
1,Using private global variant(in implement section of unit),but there are a lit
visibility pe in project or unit.
2,Using global variant, a more visibility scope in project or unit.a lit same as
above.
3,Using typed constant,just using compiler directive $J+ or Project properties
|compiler Option Typed constant.
There are some simple code as follows:
unit Unit1;
interface
uses
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: T);
private
{ Private declarations }
public
{ Public declarations }
end;
TStaticMemberObject = class
private
class procedure SetName(const Value: string);
class function GetName: string;
class function StaticMethod(ReadFlag: boolean; var Value: string):boolean;
published
property Name: string read GetName write SetName;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TStaticMemberObject }
class function TStaticMemberObject.StaticMethod(ReadFlag: boolean;
var Value: string): boolean;
const static: string = '';
begin
result := True;
if ReadFlag then
Value := static
else
static := value;
end;
class function TStaticMemberObject.GetName: string;
var
Value: string;
begin
StaticMethod(true, Value);
result := Value;
end;
class procedure TStaticMemberObject.SetName(const Value: string);
var
setvalue: string;
begin
setvalue := Value;
StaticMethod(false, setvalue);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
so: TStaticMemberObject;
begin
so.Name := 'Hello, my static property!';
ShowMessage(so.Name);
so.SetName('hi, my static property!');
ShowMessage(so.GetName);
end;
end.
Please pay attention to the class method used here. The Name property's modifiers
both use class method. In fact if you use normal static method with no class
directive the code still works well. like this:
procedure SetName(const Value: string);
function GetName: string;
Because we do not access other fields and other instance methods of this
TStaticMemberObject class or some object of TStaticMemberObject type, so there is
no AV using normal static method.
OK, if you need this trick just try it.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1006246/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Delphi系列談之:Delphi中的靜態屬性及靜態方法的實現 (轉)
- TypeScript 類靜態屬性TypeScript
- 類的靜態屬性和方法
- 深入理解JavaScript類與物件:揭秘類欄位和靜態屬性的妙用,js靜態屬性和例項屬性JavaScript物件JS
- wpf xaml binding靜態類的屬性
- 靜態屬性
- 注意!非靜態內部類和非靜態方法的匿名類的this$0屬性
- [譯] 繼承 JavaScript 類中的靜態屬性繼承JavaScript
- JavaScript 靜態屬性與靜態方法JavaScript
- JavaScript私有屬性和靜態屬性JavaScript
- js 物件方法、類方法、原型方法的區別;私有屬性、公有屬性、公有靜態屬性的區別JS物件原型
- PHP 中 static 靜態屬性和靜態方法的呼叫PHP
- 物件導向2--靜態方法、類方法、屬性方法物件
- Java 反射修改類的常量值、靜態變數值、屬性值Java反射變數
- Delphi元件與屬性編輯器 (轉)元件
- 關於php中靜態方法,靜態屬性的一些淺見PHP
- SuperObject Delphi 的 JSON 屬性亂序 – 操作類改造 – 關於屬性順序的問題ObjectJSON
- Object C學習筆記10-靜態方法和靜態屬性Object筆記
- DELPHI中的靜態虛擬及動態方法函式的區別。 (轉)函式
- Delphi 6.0中屬性編輯器的解決方案 (轉)
- Python 動態新增例項屬性,例項方法,類屬性,類方法Python
- Java學習之類的屬性(轉)Java
- java之內部類(InnerClass)----非靜態內部類、靜態內部類、區域性內部類、匿名內部類Java
- es5繼承和es6繼承中靜態方法、靜態屬性的差異繼承
- Delphi中的類和物件 (轉)物件
- python入門基礎(14)--類的屬性、成員方法、靜態方法以及繼承、過載Python繼承
- c#之saf靜態屬性與建構函式C#函式
- 物件中的靜態屬性是否在多執行緒中共享物件執行緒
- Python 類的屬性與例項屬性Python
- 避免因在類中使用靜態函式而大量使用靜態變數 (轉)函式變數
- PHP類的靜態(static)方法和靜態(static)變數PHP變數
- 靜態內部類和非靜態內部類區別
- 獲得類的屬性
- Java的靜態成員類Java
- C# 靜態類C#
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- 揭秘Java反射:如何輕鬆獲取類的屬性及父類屬性Java反射
- c++類的靜態成員C++