Delphi抽象函数调用的名称不同于基类

Pet*_*ner 1 delphi unicode backwards-compatibility abstract

说我有功能

function GetFieldName(FieldIndex: Integer; FieldName: PChar; 
    Len: Integer): Integer; virtual; abstract;
Run Code Online (Sandbox Code Playgroud)

而我正在尝试添加

function GetFieldNameA(FieldIndex: Integer; FieldName: PAnsiChar; 
    Len: Integer): Integer;
Run Code Online (Sandbox Code Playgroud)

这将临时桥接我的unicode数据库连接.

我想继续调用GetFieldName,使其不是抽象的,并做一些类型转换来调用GetFieldNameA,它将成为第一个GetFieldName的技术抽象版本.(我根本不想改变基类)

有没有办法,比如为外部引用添加'name'关键字,在子类中有一个不同名称的抽象函数?

我想象的最终结果是:

function GetFieldName(FieldIndex: Integer; FieldName: PChar; 
    Len: Integer): Integer; 
function GetFieldNameA(FieldIndex: Integer; FieldName: PAnsiChar;
    Len: Integer): Integer name 'GetFieldName Virtual Abstract'; 
Run Code Online (Sandbox Code Playgroud)

Rob*_*edy 6

不,你不能做你提出的建议.

相反,覆盖GetFieldName.在呼叫之前将它转换PCharPAnsiChar(如果需要)GetFieldNameA.后者不必(也不能,实际上)被标记override.它可以是普通的非虚函数.

这个建议的不幸部分是你必须在每个后代课堂上做这件事.另一种方法是将虚拟抽象添加GetFieldNameA到基类,然后更改所有后代以覆盖它而不是GetFieldName.更改GetFieldName要调用的基类GetFieldNameA.但如果你不能改变基类,这是一个非首发.