对于 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 等
请帮忙!提前致谢!
您要查找的是嵌套对象。 Memo1
是 TMemo
class 的实例,它有一个 Lines
属性 是 TStrings
class 的实例,它有 Add()
、Delete()
、Insert()
等方法和 Count
等属性
因此,在您的 component
中,它需要 extract
、insert
和 modify
的嵌套对象,并且这些对象需要是类型的实例有一个 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;
这应该足以让你前进,如果不问的话。
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 等
请帮忙!提前致谢!
您要查找的是嵌套对象。 Memo1
是 TMemo
class 的实例,它有一个 Lines
属性 是 TStrings
class 的实例,它有 Add()
、Delete()
、Insert()
等方法和 Count
等属性
因此,在您的 component
中,它需要 extract
、insert
和 modify
的嵌套对象,并且这些对象需要是类型的实例有一个 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;
这应该足以让你前进,如果不问的话。