当我忘记在最近添加关键词'virtual'和'override'时,我会在意外地为派生类中的过程使用相同的名称时发出编译器警告.我没有,现在我不明白为什么.我需要做些什么来获取隐藏基本成员和方法的警告?
根据这个答案(Jim McKeeth,毫无疑问是正确的):
如果在后代类中声明一个与祖先类中的方法同名的方法,那么您将隐藏该祖先方法 - 这意味着如果您有该后代类的实例(被引用为该类)那么您将没有得到祖先的行为.编译器会给你一个警告.
但是,令我惊讶的是这段代码没有给我一个警告:
unit Unit1;
interface
{$WARNINGS ON}
{$WARN HIDING_MEMBER ON}
{$WARN HIDDEN_VIRTUAL ON}
// I understand the two lines above are superfluous.
// I put them there to demonstrate that I have tried to enable these
// warnings explicitly.
type
TBase = class
public
SomeMember: integer;
procedure Foo;
end;
type
TDerived = class (TBase)
public
SomeMember: integer;
procedure Foo;
end;
implementation
{ TBase }
procedure TBase.Foo;
begin
end;
{ TDerived }
procedure TDerived.Foo; …Run Code Online (Sandbox Code Playgroud) 我有一个内置 TCP/IP 服务器的 Windows 服务。客户端和连接以及分发一些信息等。通常安装该服务以作为网络服务登录。
有一些数据存储在 ProgramData 下的文件夹中,因此在安装过程中向该服务授予对该文件夹的读/写访问权限。但是,通常会使用网络服务帐户授予对所有服务的访问权限。据我所知,可以使用ChangeServiceConfig2和 SERVICE_CONFIG_SERVICE_SID_INFO 添加特定的服务 SID。然而,从那里开始,根本不清楚如何继续,以及这是否是我的问题的解决方案。
任何帮助将非常感激!