小编ZOR*_*NCO的帖子

Delphi:如何获取(当前代码行,当前单位,当前函数)而不使用Assertion?

我正在尝试在我的程序上创建一个日志系统,它将记录文本文件上的调试消息,我想保存调用日志消息的代码中的确切位置,但我不想使用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)

delphi logging pascal exception-handling assertion

5
推荐指数
2
解决办法
5452
查看次数

类助手不会覆盖祖先的虚拟方法

我一直将类助手理解为扩展类或部分类。它们就像原始基类代码的扩展一样。如果我复制了代码的接口部分并将其添加到基类中,并且也为实现而这样做,则代码将与帮助程序完全相同地运行。这使我始终了解帮助程序中的多态性,以及为什么它们不能覆盖基类等中的方法。

但是我发现这不是完全正确的,因为如果是这样的话,为什么它们不允许覆盖基类的祖先-父方法?

这是我的意思的示例(我将只放置标头的代码而不使用实现代码):

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)

我的错误是:

在基类中找不到方法“测试”!

delphi polymorphism delphi-xe3

3
推荐指数
1
解决办法
272
查看次数