我们有这个基类:
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中受到保护:(我该怎么办?
答案 0 :(得分:3)
最重要的是避免直接调用受保护的方法。如果它是第3方类并且您无法更改它,那么您可以像访问任何其他受保护的类成员一样访问受保护的类方法。
有关如何访问受保护对象事件的示例: Accessing protected event of TWinControl
您可以类似的方式访问受保护的类方法:
type
TCustomContextOpenGLHack = class(TCustomContextOpenGL);
CCustomContextOpenGLHack = class of TCustomContextOpenGLHack;
procedure Test;
begin
CCustomContextOpenGLHack(TContextManager.DefaultContextClass).CreateSharedContext;
end;