小编Zac*_* F.的帖子

为什么嵌套类可以让包含类访问子类的受保护数据?

这个问题可能有点令人困惑,最好通过一个例子来说明:

unit Test
interface
type
  TestClass = class()
    Splitter1: TcxSplitter;
    procedure SomeMethod();
  end;

implementation
uses
  cxSplitter;

// Locally-declared child type
type
  TcxSplitterAccess = class(TcxSplitter);

procedure TestClass.SomeMethod()
var
  pos: integer;
begin
  // Access to protected field FPositionBeforeClose by casting
  pos := TcxSplitterAccess(Splitter1).FPositionBeforeClose;
end;

Run Code Online (Sandbox Code Playgroud)

请注意,在实现部分中,有一个类型TcxSplitterAccess被声明为TcxSplitter该类的子类。在该方法中SomeMethod(),属于类TestClass,一个TcxSplitter对象被强制转换为本地声明的TcxSplitterAccess类,然后受保护的字段是对象访问。

作为具有 Java、C++、C# 等语言背景的人,这让我感到惊讶。在这些语言中,只要您是从该对象的类型或继承类型。例如,类中的方法ClazzA可以访问其他ClazzA对象的私有字段,因为访问是在类型级别而不是实例级别强制执行的。用这些语言在本地声明一个类不会让包含类访问本地类的受保护数据(编辑:正如评论中指出的那样,至少对于 Java 来说实际上不是这样)。

但是,在此示例中,该类型通过首先转换为该类型TestClass来直接访问TcxSplitter对象上的受保护字段TcxSplitterAccess。我无法找到有关此“技巧”为何有效的文档。Delphi 处理访问级别是否与类 …

delphi scope class

2
推荐指数
1
解决办法
89
查看次数

标签 统计

class ×1

delphi ×1

scope ×1