能否在 Delphi 12 中启用严格的 Int32/Int64 类型兼容性?

问题描述 投票:0回答:1

我正在将大量类从 Integer 迁移到 Int64,这些类在我的 32 位应用程序中是 32 位。

如果我将 32 位 Integer 传递给类型参数显式定义为 Int64 的过程,但由于 Int32 与 Int64 兼容,因此不会显示错误,我希望编译器抛出异常。

我想这样做,这样我就可以确保我不会错过任何参考资料。

delphi
1个回答
0
投票

您可以通过使用重载方法来获取所需的信息,这将确保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;


© www.soinside.com 2019 - 2024. All rights reserved.