オブジェクト指向:オブジェクトのライフサイクルとのインタフェースは、インタフェースが自動的に解除されます

関連情報:

https://www.baidu.com/link?url=yYEHJesIUg6HguekaIW-U0HtjtLn430Dh0NXSc7ej5ixppqcq21rsYMvlCo_qNOP&wd=&eqid=87bf080a00000c50000000035e83f9e4

例:

インターフェースユニット(UnInterface.pas):

1つの 単位UnInterface。
2  
3  インターフェース
4  用途
5    Winapi.Windows、Winapi.Messages、System.SysUtils、System.Variants、System.Classes、Vcl.Graphics、
 6    Vcl.Controls、Vcl.Forms、Vcl.Dialogs、Vcl.StdCtrls、Vcl.ToolWin 、Vcl.ActnMan;
7  
8  種類
9    IFormInterface = インタフェース(メソッドはIInterface)
 10    [ ' {51869234-9F24-4409-A61D-C6A1A47E7E53} ' ]
 11    手順 ShowFormをSTDCALL 12    手順 HideForm STDCALL 13   エンド;
14  
15    TFormInterface = クラス(TFormは、メソッドはIInterface、IFormInterface)
 16  //   TFormInterface =クラス(TFormは、IFormInterface)
17    プライベート
18      { プライベート宣言} 
19      保護FRefCount:整数。
20      関数のQueryInterface(CONST IID:TGUID; うちのObj):HRESULT。上書きしますSTDCALL ;
21      関数 _AddRef:整数STDCALL 22      機能 _Release:整数STDCALL;
23      手順 ShowFormをSTDCALL 24      手順 HideForm STDCALL 25    公共
26      コンストラクタ を作成(AOwner:TComponentのを)。上書きします27  
28      手順 AfterConstruction。上書きします29      手順 BeforeDestruction。上書きします30      クラスの 機能 NewInstanceメソッド:TObjectを。上書きします31    プロパティ RefCountプロパティ:整数読みFRefCountを。
32   エンド;
33  
34  実装
35  
36  
37  手順TFormInterface.AfterConstruction。
38  開始
39    InterlockedDecrement(FRefCount)。
40  エンド;
41  
42  プロシージャTFormInterface.BeforeDestruction。
43は 開始
44    であれば RefCountプロパティ<> 0  、次いで
45    レイズ EInvalidPointer。作成し' 無効なPTRを' );
46  エンド;
47  
48  コンストラクタ TFormInterface。作成(AOwner:TComponentのを)。
49は 開始
50は、   継承されたCreateNew(AOwner);
51  端部52  
53  機能TFormInterface._AddRef:整数。
54は 開始
55    の検索結果を:= InterlockedIncrement(FRefCount)。
56  端部57  
58  関数TFormInterface._Release:整数;
59は 開始
60    の検索結果を:= InterlockedDecrement(FRefCount)。
61    もし結果= 0  、次いで
62    破棄する63  終了;
64の 
65  クラスの 機能TFormInterface.NewInstance:TObjectを。
66は 開始
67    結果:= 継承NewInstanceメソッドを。
68    TFormInterface(結果).FRefCount:= 1 ;
69  エンド;
70  
71  機能 TFormInterface.QueryInterface(CONST IID:TGUID; うちのObj):HRESULT。
72は 開始
73    であれば GETINTERFACE(IID、のObj)次いで
74    結果:= 0 
75    他の
76    件の検索結果:= E_NOINTERFACE。
77  端部78  
79  手順TFormInterface.HideForm。
80は 開始
81    隠します。
82  端部83  
84  手順TFormInterface.ShowForm。
85は 開始
86    ショー。
87  エンド;
88  
89  エンド
コードの表示

 

呼び出しユニット(Unit1.pas):

1つの ユニットUnit1は。
2つの 
3  インターフェース
4つの 
5  用途
6    Winapi.Windows、Winapi.Messages、System.SysUtils、System.Variants、System.Classes、Vcl.Graphics、
 7    Vcl.Controls、Vcl.Forms、Vcl.Dialogs、Vcl.StdCtrls、Vclに。 ToolWin、Vcl.ActnMan、
 8    IdGlobal、
 9    非共有、
 10    UnInterface。
11  
12  タイプ
13    TForm1 = クラス(TFormは)
 14      ボタン1:のTButton。
15    手順Button1Click(送信者:TObjectを)。
16    プライベート
17      {宣言プライベート} 
18は     FIForm:IFormInterface;
 19    公衆
20は     { 公開宣言は} 
21で   終わり22は 
23である VAR 
24    をForm1:TForm1;
 25  
26が 実装
27  { $ R&LT * DFM。} 
28  
29  手順TForm1.Button1Click(送信者:TObjectを);
 30  VAR 
31は   IForm:IFormInterface;
 32が 始まる
33で //   プログラム、押しボタン1は、あなたは、このように自動解除機能を実現し、2秒後に消えた、ウィンドウが表示されますが表示されます実行する
34  //  IForm:= TFormInterface.Create(NIL)AS IFormInterface; 
35  //   iForm.ShowForm; 
36  //   スリープ(2000); 
37  //   をForm1、IFormInterface型インタフェースのメンバ変数を定義し、オブジェクトはに維持することができますプログラムの終了は、Form1が自動的に解放解放されたとき時に
38  //   書かTFormInterface.Create(セルフ)、その後、問題はリリースする予定
39    IForm:= TFormInterfaceを作成しますゼロAS IFormInterface;
 40    iForm.ShowForm;
 41は    FIForm:= IForm。
 42は エンド43である エンド
コードの表示

 

おすすめ

転載: www.cnblogs.com/FKdelphi/p/12612159.html