当前位置:网站首页>类方法和类变量的使用
类方法和类变量的使用
2022-07-04 20:34:00 【pcplayer】
前言
Delphi 语法,有类方法 class procedure 和 class function ;也有类变量 class var。
可以用来干嘛?
场景
WebService 服务器端,多个 SoapDataModule 共用的方法,放到一个 DataModule 里面去。
每次 SOAP 调用,需要在 SoapDataModule 实现接口方法里面,创建该 DataModule 的实例,调用其方法,然后释放。
创建和释放的代码,总是重复。并且,没有对象缓冲池。
当然,可以给这个 DataModule 实现一个基于接口释放的对象缓冲池,但代码架构就比较复杂了。
如果想少写代码,则可考虑在该 DataModule 里面实现自己的创建和释放以及缓冲管理的代码。
背景:
请查阅本篇文章的上一篇文章。
代码例子
以下代码测试通过
该模块自己实现自己的缓冲池的代码
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.在 SOAPDATAMODULE 里面调用它的代码
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;服务器端界面显示缓冲池数量的代码
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label2.Caption := 'PoolCount = ' + TDmPool.GetPoolCount.ToString;
end;结论:
使用 class function 和 class var 可以解决把重复代码集中实现在一个类里面的预期。同时实现一个简单的缓冲池。
边栏推荐
猜你喜欢

搭建一个仪式感点满的网站,并内网穿透发布到公网 1/2

IIC (STM32)

奋斗正当时,城链科技战略峰会广州站圆满召开

五子棋 上班摸鱼工具 可局域网/人机

heatmap.js图片热点热力图插件

colResizable.js自动调整表格宽度插件

Y56. Chapter III kubernetes from entry to proficiency -- business image version upgrade and rollback (29)

Methods of improving machine vision system

仿ps样式js网页涂鸦板插件

UTF encoding and character set in golang
随机推荐
杰理之AD 系列 MIDI 功能说明【篇】
数十亿公民信息遭泄漏!公有云上的数据安全还有“救”吗?
网件r7000梅林系统虚拟内存创建失败,提示USB磁盘读写速度不满足要求解决办法,有需要创建虚拟内存吗??
巅峰不止,继续奋斗!城链科技数字峰会于重庆隆重举行
[buuctf.reverse] 151_ [FlareOn6]DnsChess
杰理之增加进关机前把触摸模块关闭流程【篇】
杰理之AD 系列 MIDI 功能说明【篇】
A quick start to fastdfs takes you three minutes to upload and download files to the ECS
async await 在map中使用
杰理之AD 系列 MIDI 功能说明【篇】
【1200. 最小絕對差】
【optimtool.unconstrain】无约束优化工具箱
Y56. Chapter III kubernetes from entry to proficiency -- business image version upgrade and rollback (29)
IIC (STM32)
Configuration of DNS server of Huawei ENSP simulator
Jerry's ad series MIDI function description [chapter]
__ init__ () missing 2 required positive arguments
华为ensp模拟器 DNS服务器的配置
CAD中能显示打印不显示
OMS系统实战的三两事