我正在将大量类从 Integer 迁移到 Int64,这些类在我的 32 位应用程序中是 32 位。
如果我将 32 位 Integer 传递给类型参数显式定义为 Int64 的过程,但由于 Int32 与 Int64 兼容,因此不会显示错误,我希望编译器抛出异常。
我想这样做,这样我就可以确保我不会错过任何参考资料。
您可以通过使用重载方法来获取所需的信息,这将确保Delphi执行其输入参数类型与传递的参数类型匹配的重载方法。
然后,对于任何输入参数与您所需的输入参数不匹配的重载方法,您可以将此类方法标记为“已弃用”。这将在调用此类重载方法的任何地方创建 W1000 符号“%s”已被弃用 (Delphi)。 现在,这种方法需要注意的是,您可能需要创建 8 个方法的重载版本,以涵盖四种有符号整数类型(Int8、Int16、Int32 和 Int64)以及四种无符号整数类型(UInt8、UInt16、UInt32) ,UInt64);
这是检测 4 个有符号整数类型的四个重载方法的小示例:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure Test(I: Int8); overload; deprecated;
procedure Test(I: Int16); overload; deprecated;
procedure Test(I: Int32); overload; deprecated;
procedure Test(I: Int64); overload;
public
{ Public declarations }
end;
procedure TForm1.Test(I: ShortInt);
begin
MessageDlg('8 bit integer',mtInformation,[mbOK],0);
end;
procedure TForm1.Test(I: Int16);
begin
MessageDlg('16 bit integer',mtInformation,[mbOK],0);
end;
procedure TForm1.Test(I: Int32);
begin
MessageDlg('32 bit integer',mtInformation,[mbOK],0);
end;
procedure TForm1.Test(I: Int64);
begin
MessageDlg('64 bit integer',mtInformation,[mbOK],0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var ShI: ShortInt;
SmI: SmallInt;
I: Integer;
I64: Int64;
NatI: NativeInt;
begin
Test(ShI);
Test(SmI);
Test(I);
Test(I64);
Test(NatI);
end;