我有以下代码(简化):
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1 in 'Unit1.pas';
var
f: TFoo<Integer>;
begin
f := TFoo<Integer>.Create;
f.Baz;
Readln;
end.
unit Unit1;
{$D-}
interface
type
TFoo = class
public
procedure Bar(const s: string);
end;
TFoo<T> = class(TFoo)
public
procedure Baz;
end;
implementation
uses
TypInfo;
{ TFoo }
procedure TFoo.Bar(const s: string);
begin
Writeln(s);
end;
{ TFoo<T> }
procedure TFoo<T>.Baz;
begin
Bar(PTypeInfo(TypeInfo(T)).Name);
end;
end.
f.Baz
现在,当我进入时,Unit1.TFoo<T>.Baz
虽然我明确禁用了该单元的调试信息,但我无法进入TFoo.Bar
哪个是正确的。我认为这是因为泛型在内部是如何实现的(如模板),并且因为TFoo<Integer>
在我的Project1
. 当我添加以下单元时,我无法再进入Baz
:
unit Unit2;
{$D-}
interface
uses
Unit1;
type
TIntegerFoo = TFoo<Integer>;
implementation
end.
现在有什么方法可以完全删除泛型类型的调试信息,这样我就可以在任何地方(调试信息所在的位置)专门化该类型,但避免进入泛型类型的方法?Generics.Collections.TList<T>
我想这一定是可能的,因为如果不启用“使用调试 .dcus”选项,我将无法执行任何方法。