class
unit MyFirstUnit;
uses MyTranslateUnit;
...
sText := Dictionary('text to translate', UnitName);
...
end.
unit AnotherUnit;
uses MyTranslateUnit;
...
sText := Dictionary('new text to translate', UnitName);
...
end.
我的程序中有很多地方我称之为字典(...)。如何避免将UnitName作为第二个参数传递?
是否可以在没有第二个参数的情况下在MyTranslateUnit中获取调用者的UnitName?
我想要一个像
这样的功能function Dictionary(sTextToTranslate:string)
答案 0 :(得分:1)
只要调用发生在类的方法中,您就可以简单地编写UnitName
。每个Delphi TObject
都提供class function UnitName: string;
,它给出了声明类的单位名称。
这不会让您省略第二个参数,但它简化了重命名单位或在单位之间复制或移动代码时的维护。
编辑:如果没有第二个参数,有一个真正的肮脏黑客可以使它工作,它也只能在类的方法中工作。我建议只能作为最后的手段使用它!删除一个参数的好处很容易在将来适得其反。
为TObject声明一个类助手,如下所示:
type
TRealDirtyDontDoItObjectHelper = class helper for TObject
public
class function Dictionary(const sTextToTranslate: string): string;
end;
implementation
class function TRealDirtyDontDoItObjectHelper.Dictionary(const sTextToTranslate: string): string;
begin
{ whatever implementation should go here }
Result := UnitName + ': ' + sTextToTranslate;
end;
现在你可以打电话给
Caption := Dictionary('title');
在UnitName
赋予方法所属类的单元的任何方法内。请注意,这意味着当前实例的类,而不一定是声明方法的一些继承类。
我还应该提一下,这个用于TObject 的类助手不会干扰任何其他类的类助手,即使它们明显继承自TObject
。