0

我想向现有的 Delphi 类添加一个方法。我认为基本类框架可以,但需要访问在我的方法中调用我的方法的对象的一些属性。我似乎什么也做不了。

旧类 TStringGrid

引用 myNewMethod 的新类 OptStringGrid

//example of new class method
procedure myNewMethod (const Name: string);
begin
  //Here is my question location.
  // I would like to access properties of the calling object in this case
  // testgrid. Like... i:= testgrid.rowcount;
end 

// Unit Calling statements
var
  testGrid : OptStringGrid;
  i: integer;
begin
  i := testgrid.myNewMethod(strName);
end;

Delphi 新手,如有错误,请原谅我的术语。我知道示例代码不可编译。我正在寻找技术来访问所描述的属性。

4

1 回答 1

7

要访问其方法正在执行的对象的成员,您可以使用该Self变量。它在任何方法体内自动声明和分配。事实上,它的使用通常是隐式的——对象的任何成员都自动在方法体内的范围内。Self通常,您只需要在方法中已经存在与您希望使用的成员同名的其他变量时,才需要限定成员访问权限。

实现方法的关键是您需要确保它们实际上是方法。问题中显示的代码未定义myNewMethod为方法。相反,它是一个独立的子程序。只有方法可以在对象上调用,因此只有方法可以访问它们被调用的对象。

方法声明出现在类声明中。你的可能看起来像这样:

type
  TOptStringGrid = class(TStringGrid)
  public
    function myNewMethod(const Name: string): Integer;
  end;

方法定义与所有其他子例程主体一起出现在单元的实现部分,就像在对象检查器中双击事件时 IDE 为您创建的所有事件处理程序实现一样。这些只是普通的方法。

方法实现与其他子程序实现的区别在于方法名称包括它所属的类的名称:

function TOptStringGrid.myNewMethod(const Name: string): Integer;
begin
  // ...
end;

观察TOptStringGrid.上面代码中的部分。这就是编译器如何知道方法体属于该类而不是其他任何名为myNewMethod.

在该方法主体中,您可以访问祖先类的所有已发布、公共和受保护成员TStringGrid,包括RowCount属性。

于 2013-11-08T01:33:42.937 回答