我的项目中有一个泛型类,它有两个具有不同可见性的重载方法,如下所示: 一个具有私人可见性和一些参数.它使用参数和一些私有结构(其中一些在构造函数中注入)来执行某些操作. 第
>一个具有私人可见性和一些参数.它使用参数和一些私有结构(其中一些在构造函数中注入)来执行某些操作.
>第二个具有受保护可见性的无参数.派生类使用此类来执行超类实现的操作.为此,它调用私有方法.
这工作正常但编译器发出提示消息如下:
[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文件中声明和实例化泛型类型有关.