如何访问受保护的类方法



我们有这个基类:

TCustomContextOpenGL = class(TContext3D)
  protected
    **class** procedure CreateSharedContext; virtual; abstract;
  end;

在程序中知道当前的上下文类,我们做:

TContextManager.DefaultContextClass => return TContextClass = class of TContext3D;

这将为示例返回 TCustomAndroidContext 或 TCustomContextIOS,他们覆盖 CreateSharedContext 但让它受到保护

我的问题是我需要做

TContextManager.DefaultContextClass.CreateSharedContext 

但这当然行不通,因为 CreateSharedContext 在 TCustomContextOpenGL :( 中受到保护我该怎么办?

最好的办法是避免直接调用受保护的方法。如果它是第三方类并且您无法更改它,则可以像访问任何其他受保护类成员一样访问受保护的类方法。

下面是如何访问受保护对象事件的示例:访问 TWinControl 的受保护事件

访问受保护类方法的类似方式:

type
  TCustomContextOpenGLHack = class(TCustomContextOpenGL);
  CCustomContextOpenGLHack = class of TCustomContextOpenGLHack;
procedure Test;
begin
  CCustomContextOpenGLHack(TContextManager.DefaultContextClass).CreateSharedContext;
end;

最新更新