我正在尝试在我的程序上创建一个日志系统,它将记录文本文件上的调试消息,我想保存调用日志消息的代码中的确切位置,但我不想使用Assert函数,因为它创建例外,这个系统不仅仅用于记录异常,我还要编写一些调试信息.
使用断言的示例:
procedure AnyProcedure();
begin
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Start');//Log occurred is "c:\progr~..jkdj.pas" at line [29]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Step1 done');//Log occurred is "c:\progr~..jkdj.pas" at line [37]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Step2 done');//Log occurred is "c:\progr~..jkdj.pas" at line [45]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do …
Run Code Online (Sandbox Code Playgroud) 我一直将类助手理解为扩展类或部分类。它们就像原始基类代码的扩展一样。如果我复制了代码的接口部分并将其添加到基类中,并且也为实现而这样做,则代码将与帮助程序完全相同地运行。这使我始终了解帮助程序中的多态性,以及为什么它们不能覆盖基类等中的方法。
但是我发现这不是完全正确的,因为如果是这样的话,为什么它们不允许覆盖基类的祖先-父方法?
这是我的意思的示例(我将只放置标头的代码而不使用实现代码):
type
TAncestor = class
public
procedure Test; virtual;
end;
TBase = class(TAncestor)
public
end;
Run Code Online (Sandbox Code Playgroud)
那么为什么下一个代码不正确:
THelper = class helper of TBase
public
procedure Test; override;
end;
Run Code Online (Sandbox Code Playgroud)
我的错误是:
在基类中找不到方法“测试”!