如何在delphi中定义类内部的类?
我正在尝试学习一些新技巧,以便更好地在Delphi中组织单元中的一些源代码。 我注意到我访问的一些函数或方法似乎是类中的类,但我还没有成功地在类中创建一个工作类,尽管它编译得很好,但在执行代码时仍然会收到错误消息 我想做的是创建一个树,其中包含函数、过程和值,以进行设置或获取。如果有人能帮我举个例子,我将不胜感激。 我今天有一些类型的课程。 然后,我将类型分配给一个变量: 某物 然后,为了发生什么事,我写了“一些事,行动” 我的目标是更进一步,定义子功能或/和子程序。 假设我有三四节课。TSnippet、战术1、战术2、战术1等。 我希望使用这些变量或将其分配给单个变量,并像以下那样使用它们:如何在delphi中定义类内部的类?,delphi,delphi-2009,Delphi,Delphi 2009,我正在尝试学习一些新技巧,以便更好地在Delphi中组织单元中的一些源代码。 我注意到我访问的一些函数或方法似乎是类中的类,但我还没有成功地在类中创建一个工作类,尽管它编译得很好,但在执行代码时仍然会收到错误消息 我想做的是创建一个树,其中包含函数、过程和值,以进行设置或获取。如果有人能帮我举个例子,我将不胜感激。 我今天有一些类型的课程。 然后,我将类型分配给一个变量: 某物 然后,为了发生什么事,我写了“一些事,行动” 我的目标是更进一步,定义子功能或/和子程序。 假设我有三四节课。TSni
Snippet.Action1.SubAction1.Organize(param1,param2);
Snippet.Action2.SubAction2.Returns='SomeString';
Snippet.Action1.SubAction1.SomeProcedure;
有谁能帮我举一个有用的例子,比如如何为这种方法编写代码?
而且。。anybydy知道这样的代码实现将如何影响执行代码所需的CPY循环,而不是让数千个过程具有所有不同的名称,但更直接的访问(感觉更直接的访问)的旧式方法吗
我的第一篇文章可能有点不清楚,如下所示。
我想利用编辑器提供的程序/函数的自动建议来简化编程。
我开始为此制作课程,效果非常好。
考虑一个类名“数据”。我们可以用数据做什么?我们可以编辑、添加、删除、保存和加载。
好啊这是我的第一节课
然后考虑另一个类:“加密”。我们可以做DES,DES3,HASH,BITSHUFFLE。
我可以继续上第三节课:“压缩”。我们可以做LZW,ZIP,RAR,MP3,MPG,MP4等
我不想将它们作为3个不同的类来使用,而是想将它们组合在一个类中,同时保持它们的独立性。
我想为其他类制作一种自己的类。我们可以称之为“MyStuff”
每当我在编辑器中键入“MyStuff.”时,我都会得到一个“数据、加密、压缩”列表。此外,当我选择“Compress”时,该类的过程和函数的下一个列表将列出
这些类可能有一些局部变量,但主要功能将面向全局数组
也许还有其他方法可以实现这一点。我不知道。
我的基本目标是能够对属于同一类的例程进行分类和组合。
这已经以单位完成,但这对编辑器中的自动列表没有帮助。
先谢谢你。
莫顿。编辑后,我想我明白你在问什么了 您所称的“类中的类”称为
属性
和方法
;它们是在其包含类中声明的其他类、变量或过程/函数。您正在谈论的“列表”称为codeinsight
,它向您显示了此时代码中引用的类的可用属性和方法
这应该像您描述的那样,并让您了解如何在自己的代码中实现它:
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
属性
这应该足以让您继续。:-)请记住,Delphi几乎在所有版本中都包含VCL和RTL的源代码,因此您总是需要查看这些代码以获取示例。(它们并不总是最好的例子,但它们应该给你一些如何做事的想法。)你的问题很不清楚。你能给出一个实际函数或方法的例子,它似乎是你提到的类中的类吗?你意识到在实现部分声明的任何东西都是该单元固有的私有,即使它没有在其他东西中声明?@mortenbrendfur:回应Ken的评论,你的问题很模糊。您的问题的一些清晰的代码示例将有助于我们为您提供正确的答案。”“类型类”没有意义:所有类都是类型,必须在类型部分声明它们。“一个类中的一个类”是可以完成的,但在面向对象的20年中,我从来没有必要做这样的事情。只需使用对象组合和委托:一个类引用或生成一个单独类的实例。类对其他人的可见性取决于uses子句、访问修饰符、单元中的位置等@mortenbrendfur:就性能考虑而言,除非您使用的是某种非常有限的嵌入式设备,以及现代硬件,性能上的差异将是如此之小,以至于不值得考虑,除非您处于某种非常紧密、非常长的循环中——这从一开始就是糟糕的代码。通常情况下,一个好的OOP设计即使不是更好,也会和过程方法一样有效。@Mikey谢谢。我意识到我现在有几个月的时间来将我的旧源代码转换成这种“新”的工作和编写源代码的方式。有了简单的例子,一切都变得简单多了,我相信过一段时间我就能把它变得非常复杂:)最棒的是,我看到了这种设计源代码的“新”方法的明显优势。非常感谢您提供了这个例子。我会来回测试一下。如果可以的话,我还有一个问题。创造和自由。我想他们只是在需要时将函数“加载”到内存中,然后释放内存?如何在初始化PAR中创建