如何在delphi中定义类内部的类?

时间:2013-04-14 02:51:14

标签: delphi delphi-2009

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

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

我的目标是更进一步,并定义子功能或/和子程序。 假设我有三到四节课。 TSnippet,TAction1,TAction2,TSubAction1等。 我想使用或将它们分配给单个变量并使用它们:

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

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

截至我的第一篇文章可能有点不清楚,接下来。 我想利用编辑器自动提供的程序/功能,以简化编程。 我开始为此制作一个Class,它效果很好。 考虑一个类名“数据”。我们可以用数据做什么?我们可以编辑,添加,删除,保存和加载。 好。这是我的第一堂课。

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

在编辑之后,我想我明白你在问什么。

您所谓的“课程中的课程”称为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.并选择CompressionEncryption。选择Compression应该允许您设置CompressionType属性。

enter image description here

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