1

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

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

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

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

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

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

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

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

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

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

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

4

1 回答 1

3

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

你所说的“类中的类”被称为propertiesand methods; 它们是在其包含类中声明的其他类、变量或过程/函数。您正在谈论的“列表”称为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属性。

在此处输入图像描述

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

于 2013-04-14T06:33:57.500 回答