对于 Delphi 10.2.3:如何创建 unit.someproperty.anotherproperty.mymethod(myvariable: variabletype): variabletype;?

For Delphi 10.2.3: How to create unit.someproperty.anotherproperty.mymethod(myvariable: variabletype): variabletype;?

For Delphi 10.2.3: 不知道怎么问这个问题,但是如何创建一个类似于 memo1.lines.add() 的方法;和 memo1.Lines.Count.ToString;其中 lines 包含许多其他方法、过程和属性??

这就是我的想法:

unit.someproperty.anotherproperty.mymethod(我的变量:变量类型):变量类型;

unit.someproperty.unit2.mymethod(myvariable: variabletype): 变量类型;

外观看起来像:

function component.extract.tagA(attribute, source: string): string;
procedure component.insert.tagA(attribute, source, dest: string);
procedure component.modify.tagA(attribute, source, dest: string);

如果您键入组件。它将为您提供提取、插入和修改选项方面的帮助以供下一步使用。

那么,我如何制作一个函数或程序,让我可以拥有 .extract。或.extract。或.插入。等

我知道这应该是基本知识,但我正在从事的项目变得足够大,我可以更轻松地阅读和使用它。我知道这是可以做到的,但我不知道如何正确地表达它才能找到我需要做的事情。

我想要多个单元...然后我使用它们创建了一个组件,因此它们具有嵌套的方法和过程,就像您在 Tmemo 中看到的那些带点的方法和过程一样工作...就像 memo1.lines.add, memo1.lines.delete、memo1.lines.insert 等

请帮忙!提前致谢!

您要查找的是嵌套对象。 Memo1TMemo class 的实例,它有一个 Lines 属性 是 TStrings class 的实例,它有 Add()Delete()Insert() 等方法和 Count 等属性

因此,在您的 component 中,它需要 extractinsertmodify 的嵌套对象,并且这些对象需要是类型的实例有一个 tagA() 方法。

Delphi 语法不允许您 声明 class 具有带点的子属性。

但是,您可以使用一种已知的编码风格来实现这种效果 作为流畅的设计(参见 https://en.wikipedia.org/wiki/Fluent_interface)。这是一个超简单的例子:

type
  TMySubProperty = class
    protected
    procedure DoSomething;
    property Width : Integer read {define getter and setter}
  end;

  TMyComponent = class(TComponent)
  [...]
  property
    MySubProperty : TMySubProperty read GetMySubProperty;
  end;

  [...]

  function TMyComponent.GetMySubProperty : TMySubProperty;
  begin
    Result := {calculate the result however you like}
  end;

然后,在您的代码中,您可以编写类似

的内容
  MyComponent.MySubProperty.Width := 666;
  MyComponent.MySubProperty.DoSomething;

显然你可以有任意数量的子属性,它们可以嵌套到任意 级别:基本上,您需要一个 class 类型用于子 属性 和一个拥有的函数 class(在这个简单示例中为 TMyComponent)returns 您正在尝试的 class 实例 访问。 Getter 函数可以编码为接受标识特定的参数 子实例 属性 class,如

  MyComponent.MySubProperty[i].Width := 666;

这应该足以让你前进,如果不问的话。