gpt4 book ai didi

delphi - delphi 如何在类中定义类?

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

我正在尝试学习一些新技巧,以便更好地组织我在 Delphi 中的单元中的一些源代码。
我注意到我访问的一些函数或方法似乎是类中的类,但是我还没有成功地在类中创建一个工作类,虽然它编译得很好,但在执行代码时我仍然收到错误消息。

我想做的是制作一种具有要设置或获取的函数、过程和值的树。如果有人可以通过示例帮助我,我将不胜感激。
我今天有一些类型的类。
然后我将类型分配给一个变量:
某事=T某事
然后为了发生一些事情,我写了“something.action”。

我的目标是更进一步,并定义子功能或/和子程序。
可以说我有三四门课。 TSnippet、TAction1、TAction2、TSubAction1 等。
我想使用或将它们分配给单个变量,并像这样使用它们:

Snippet.Action1.SubAction1.Organize(param1,param2);
Snippet.Action2.SubAction2.Returns='SomeString';
Snippet.Action1.SubAction1.SomeProcedure;

有没有人能帮我举一个有用的例子,比如如何为这种方法编写代码?
而且..anybydy是否知道这样的代码实现将如何影响执行代码所需的CPYCycles,而不是拥有数千个具有不同名称的过程的老式方法,但更直接访问(感觉更直接访问)。

由于我的第一篇文字可能有点不清楚,以下是。
我想利用编辑器对可用程序/功能的自动建议,以便稍微简化编程。
我开始为此创建一个类,并且效果很好。
考虑一个类名“数据”。我们可以用数据做什么?我们可以编辑、添加、删除、保存和加载。
行。这是我的第一个类。

然后考虑另一个类:“加密”。我们可以做 DES、DES3、HASH、BITSHUFFLE。
我可以继续上第三节课:“压缩”。我们可以做 LZW、ZIP、RAR、MP3、MPG、MP4 等。

我不想将它们用作 3 个不同的类,而是将它们组合为一个,但将它们分开。
我想为其他类制作一种 OwnerClass。我们可以称之为“MyStuff”

每当我输入“MyStuff”时。在编辑器中,我应该列出“数据、加密、压缩”。此外,当我选择“压缩”时,该类的过程和函数的下一个列表将列出。

这些类可能有一些局部变量,但主要功能是针对全局数组。

也许还有其他方法可以实现这一目标。我不知道。
我的基本目标是能够对属于一起的例程进行分类和组合。
这已经在 Units 中完成,但这对编辑器的自动列表没有帮助。
先感谢您。
莫顿。

最佳答案

我想我明白你在编辑后要问的是什么。

你所说的“类中的类”被称为 propertiesmethods ;它们是在其包含类中声明的其他类、变量或过程/函数。您所说的“列表”称为Code Insight ,它会向您显示此时您在代码中引用的类的可用属性和方法。

这应该像您描述的那样做,并让您了解如何在自己的代码中实现它:

unit MyStuffUnit;

interface

uses
SysUtils;

type

TEncryptionType = (etDES, etDES3, etHASH, etBITSHUFFLE);

TMyStuffEncryption = class(TObject)
private
FEncryptType: TEncryptionType;
public
constructor Create;
published
property EncryptionType: TEncryptionType read FEncryptType
write FEncryptType;
end;

TCompressionType = (ctLZW, ctZIP, ctRAR, ctMP3, ctMPG, ctMP4);

TMyStuffCompression = class(TObject)
private
FCompressionType: TCompressionType;
public
constructor Create;
published
property CompressionType: TCompressionType read FCompressionType
write FCompressionType;
end;

TMyStuff = class(TObject)
private
FCompression: TMyStuffCompression;
FEncryption: TMyStuffEncryption;
public
constructor Create;
destructor Destroy; override;
published
property Compression: TMyStuffCompression read FCompression
write FCompression;
property Encryption: TMyStuffEncryption read FEncryption
write FEncryption;
end;

implementation

constructor TMyStuffEncryption.Create;
begin
inherited;
FEncryptType := etDES;
end;

constructor TMyStuffCompression.Create;
begin
inherited;
FCompressionType := ctLZW;
end;

constructor TMyStuff.Create;
begin
inherited;
FCompression := TMyStuffCompression.Create;
FEncryption := TMyStuffEncryption.Create;
end;

destructor TMyStuff.Destroy;
begin
FCompression.Free;
FEncryption.Free;
inherited;
end;

end.

如果您创建 TMyStuff 的实例在您的代码中,您应该可以输入 MyStuff.并获得选择 Compression的选项或 Encryption .选择 Compression应该允许您设置 CompressionType属性(property)。

enter image description here

这应该足以让你继续前进。 :-) 请记住,Delphi 在几乎所有版本中都包含 VCL 和 RTL 的源代码,因此您总是可以查看示例。 (它们并不总是最好的例子,但它们应该给你关于如何做事的想法。)

关于delphi - delphi 如何在类中定义类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995259/

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