我们有这个基类:
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;