当前位置:网站首页>Use of class methods and class variables
Use of class methods and class variables
2022-07-04 21:34:00 【pcplayer】
Preface
Delphi grammar , Class method class procedure and class function ; There are also class variables class var.
What can be used for ?
scene
WebService Server side , Multiple SoapDataModule Common method , In a DataModule Go inside .
Every time SOAP call , Need to be in SoapDataModule Implement interface methods , Create the DataModule Example , Call its methods , Then release .
Create and release code , Always repeat . also , No object buffer pool .
Of course , You can give this DataModule Implement an object buffer pool based on interface release , But the code architecture is more complex .
If you want to write less code , You can consider in this DataModule It implements its own creation, release and buffer management code .
background :
Please refer to the previous article of this article .
Code example
The following code passed the test
The module implements its own buffer pool code
unit UDmPool;
interface
uses
System.SysUtils, System.Classes;
type
TDmPool = class(TDataModule)
private
{ Private declarations }
class var FList: TList;
public
{ Public declarations }
class function GetMyDM: TDmPool;
class procedure ReleaseDM(DM: TDmPool);
class function GetPoolCount: Integer;
function HelloPool(const S: string): string;
end;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
{ TDmPool }
class function TDmPool.GetMyDM: TDmPool;
var
DM: TDmPool;
begin
if not Assigned(FList) then FList := TList.Create;
if FList.Count = 0 then
begin
DM := TDmPool.Create(nil);
Result := DM;
end
else
begin
DM := TDmPool(FList.Items[0]);
FList.Delete(0);
end;
end;
class function TDmPool.GetPoolCount: Integer;
begin
if not Assigned(FList) then
begin
Result := 0;
Exit;
end;
Result := FList.Count;
end;
function TDmPool.HelloPool(const S: string): string;
begin
Result := 'Hello, ' + S + '; This is DmPool';
end;
class procedure TDmPool.ReleaseDM(DM: TDmPool);
begin
FList.Add(DM);
end;
end.stay SOAPDATAMODULE Inside the code that calls it
function TSoapDM_A.HelloPool(const S: string): string;
var
DM: TDmPool;
begin
DM := TDmPool.GetMyDM;
Result := DM.HelloPool('SoapDM_A' + S);
TDmPool.ReleaseDM(DM);
end;The server-side interface shows the code of the number of buffer pools
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label2.Caption := 'PoolCount = ' + TDmPool.GetPoolCount.ToString;
end;Conclusion :
Use class function and class var It can solve the expectation of implementing repeated code in one class . At the same time, implement a simple buffer pool .
边栏推荐
猜你喜欢

Stealing others' vulnerability reports and selling them into sidelines, and the vulnerability reward platform gives rise to "insiders"

redis03——Redis的网络配置与心跳机制

华为ensp模拟器 给路由器配置DHCP

Daily question -leetcode1200- minimum absolute difference - array - sort

【C語言】符號的深度理解

Redis:Redis配置文件相关配置、Redis的持久化

torch.tensor和torch.Tensor的区别

华为模拟器ensp的路由配置以及连通测试

torch. Tensor and torch The difference between tensor

NetWare r7000 Merlin system virtual memory creation failed, prompting that the USB disk reading and writing speed does not meet the requirements. Solution, is it necessary to create virtual memory??
随机推荐
redis事务
Render function and virtual DOM
学习突围3 - 关于精力
Compréhension approfondie du symbole [langue C]
杰理之AD 系列 MIDI 功能说明【篇】
Huawei ENSP simulator enables devices of multiple routers to access each other
[public class preview]: basis and practice of video quality evaluation
【C語言】符號的深度理解
改善机器视觉系统的方法
数十亿公民信息遭泄漏!公有云上的数据安全还有“救”吗?
Day24: file system
华为ensp模拟器 DNS服务器的配置
admas零件名重复
每日一题-LeetCode556-下一个更大元素III-字符串-双指针-next_permutation
CAD中能显示打印不显示
搭建一个仪式感点满的网站,并内网穿透发布到公网 1/2
[C language] deep understanding of symbols
【公开课预告】:视频质量评价基础与实践
PS vertical English and digital text how to change direction (vertical display)
Kubedm initialization error: [error cri]: container runtime is not running