gpt4 book ai didi

delphi - Delphi 属性真实世界示例在哪里?

转载 作者:行者123 更新时间:2023-12-03 14:38:15 33 4
gpt4 key购买 nike

我通过TMS Aurelius知道例如,我们可以使用"new"2010 属性功能在运行时将数据库表字段序列化为对象属性,而我不是这种深层面向对象模式的专家,因此我研究了 TMS 源代码,并且可以不明白自己如何实现它,不是针对 DB,不是针对 XML。

因此,我在 Delphi Attributes 上查找了 Google 的所有结果,并且人们发布的所有结果都是声明示例,然后在展示其实际示例之前就停止了。

那么我们如何在表单/执行代码中投影、声明、编码和使用这些精炼的类的现实世界示例在哪里?

有人可以在这里分享一个例子或者知道一篇完整的好文章吗?

编辑1:

答案应该有一个带有 TButtonTForm,单击时执行创建的属性类的一些使用,不要回答仅显示属性和类接口(interface),因为正如我之前所说,有很多这样的声明示例

最佳答案

我必须说我不太清楚你需要什么样的例子。恕我直言,在 http://docwiki.embarcadero.com/RADStudio/Rio/en/Overview_of_Attributes是您应该需要的一切,也许前提是您具有注释和/或方面编程的一些基本知识。

示例取决于特定软件的作者使用属性的方式/目的。您提到了ORM系统:这里的典型用法是用此类框架后端的数据库操作所需的附加信息来注释表示数据库实体的类的成员。假设您有一个数据库实体,其字段 COMPANY CHAR(32) NOT NULL 并且您希望在 Delphi 类中表示它:

TSomeDBEntity = class(...)
FCDS: TClientDataset;
...
constructor Create;
...
[TCharColumn('COMPANY', 32, false)]
property CompanyName: string read GetCompanyName write SetCompanyName;
end;

然后您将使用构造函数定义属性 TCharColumn

constructor TCharColumn.Create(const AFieldName:string; ALength:integer; ANullable:boolean);
begin
inherited;
FName := AFieldName;
FLength := ALength;
FNullable := ANullable;
end;

此类注释的用法可能如下所示:

FCDS := TClientDataset.Create(nil);
RttiContext := TRttiContext.Create;
try
RttiType := RttiContext.GetType(self.ClassType);
Props := RttiType.GetProperties;
for Prop in Props do
begin
Attrs := Prop.GetAttributes;
case Prop.PropertyType.TypeKind of
tkUString:
begin
for Attr in Attrs do
if Attr is TCharColumn then
begin
ColAttr := TCharColumn(Attr);
FCDS.FieldDefs.Add(ColAttr.FName, ftString, ColAttr.FLength, not ColAttr.FNullable);
end;
end;
else
//... ;
end;
end;
finally
RttiContext.Free;
end;

该程序的这一部分演示了如何在运行时基于 Delphi 中的注释定义数据集中的字段。由于缺乏命名参数,我们受到了一点限制,因此使用参数列表并不灵活,例如就像在 Java 中一样(比较 TMS Aurelius 注释集 http://www.tmssoftware.com/site/manuals/aurelius_manual.pdfhttp://www.techferry.com/articles/hibernate-jpa-annotations.html

关于delphi - Delphi 属性真实世界示例在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898212/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com