加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:15:15 所属栏目:大数据 来源:网络整理
导读:我的项目中有一个泛型类,它有两个具有不同可见性的重载方法,如下所示: 一个具有私人可见性和一些参数.它使用参数和一些私有结构(其中一些在构造函数中注入)来执行某些操作. 第二个具有受保护可见性的无参数.派生类使用此类来执行超类实现的操作.为此,它调用
我的项目中有一个泛型类,它有两个具有不同可见性的重载方法,如下所示:

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

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

[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文件中声明和实例化泛型类型有关.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读