是否可以将接口的方法作为参数传递?
我正在尝试这样的事情:
interface
type
TMoveProc = procedure of object;
// also tested with TMoveProc = procedure;
// procedure of interface is not working ;)
ISomeInterface = interface
procedure Pred;
procedure Next;
end;
TSomeObject = class(TObject)
public
procedure Move(MoveProc: TMoveProc);
end;
implementation
procedure TSomeObject.Move(MoveProc: TMoveProc);
begin
while True do
begin
// Some common code that works for both procedures
MoveProc;
// More code...
end;
end;
procedure Usage;
var
o: TSomeObject;
i: ISomeInterface;
begin
o := TSomeObject.Create;
i := GetSomeInterface;
o.Move(i.Next);
// …Run Code Online (Sandbox Code Playgroud) 我们正在将项目从Delphi 2006升级到Delphi 2010.旧代码是:
InputText: string;
InputText := SomeTEditComponent.Text;
...
for i := 1 to length(InputText) do
if InputText[i] in ['0'..'9', 'a'..'z', '?' { and more special characters } ] then ...
Run Code Online (Sandbox Code Playgroud)
问题是重音字母 - 比较会失败.
我尝试将源代码从ANSI切换到UTF8和LE UCS-2,但没有运气.仅作为AnsiChar投射:
if CharInSet(AnsiChar(InputText[i]), ['0'..'9', 'a'..'z', '?']) then
Run Code Online (Sandbox Code Playgroud)
有趣的是Delphi如何处理这些字母 - 在调试期间在Evaluate中尝试这个:
Ord('?') = Ord('Ø')
Run Code Online (Sandbox Code Playgroud)
(是的,Delphi说True,在Windows 7上捷克语)
问题是:如何在不强制它们作为AnsiStrings的情况下存储和比较简单字符串?因为如果这不起作用我们为什么要使用Unicode?
现在我们在一些部分使用简单的CharInSet(AnsiChar(...