当前位置 : 主页 > 编程语言 > delphi >

delphi – 未使用提示在泛型类中重载方法

来源:互联网 收集:自由互联 发布时间:2021-06-23
我的项目中有一个泛型类,它有两个具有不同可见性的重载方法,如下所示: 一个具有私人可见性和一些参数.它使用参数和一些私有结构(其中一些在构造函数中注入)来执行某些操作. 第
我的项目中有一个泛型类,它有两个具有不同可见性的重载方法,如下所示:

>一个具有私人可见性和一些参数.它使用参数和一些私有结构(其中一些在构造函数中注入)来执行某些操作.
>第二个具有受保护可见性的无参数.派生类使用此类来执行超类实现的操作.为此,它调用私有方法.

这工作正常但编译器发出提示消息如下:

[dcc32 Hint] Project1.dpr(15): H2219 Private symbol ‘Bar’ declared but never used

出于好奇,我试图重新创建课程,而不是一般课程.在这种情况下,编译器提示不会出现.

以下您可以找到一个演示案例的简单示例:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type

  //class with generic type
  TFoo<T> = class
    private
      procedure Bar(param : string); overload;
    protected
      procedure Bar; overload;
  end;


  //class without generic type
  TFoo2 = class
    private
      procedure Bar(param : string); overload;
    protected
      procedure Bar; overload;
  end;

  //TFoo<T> methods
  procedure TFoo<T>.Bar(param: string);
  begin
    writeln('Foo<T>. this is a private procedure. ' + param);
  end;


  procedure TFoo<T>.Bar;
  begin
    writeln('Foo<T>. This is a protected procedure.');
    Bar('Foo<T>. calling from a protected one.');
  end;

  //TFoo2 methods
  procedure TFoo2.Bar(param: string);
  begin
    writeln('Foo2. this is a private procedure. ' + param);
  end;


  procedure TFoo2.Bar;
  begin
    writeln('Foo2. This is a protected procedure.');
    Bar('Foo2. calling from a protected one.');
  end;


var
  foo : TFoo<string>;
  foo2 : TFoo2;
begin
  try
    foo := TFoo<string>.Create;
    foo2 := TFoo2.Create;
    try
      foo.Bar;
      foo2.Bar;
      readln;
    finally
      foo.Free;
      foo2.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

在此示例中,不使用泛型类型,但没有必要证明这一点.我真正的类确实使用它,并且还会出现编译器提示.

任何关于为什么这个编译器提示出现在泛型类中的想法?我在Delphi XE5上测试了这个.

更新:因为它似乎是一个编译器错误,我们已经提交了QC report.

这是一个编译器错误.您应该提交质量控制报告.

有趣的是,您的代码甚至不能在较旧的Delphi版本上编译.例如,我无法在XE3上编译您的代码.第一次调用Bar失败了:

[dcc32 Error]: E2250 There is no overloaded version of ‘Bar’ that can be called with these arguments

如果我记得这个问题与在.dpr文件中声明和实例化泛型类型有关.

网友评论