unit MyFirstUnit;
uses MyTranslateUnit;
...
sText := Dictionary('text to translate', UnitName);
...
end.
unit AnotherUnit;
uses MyTranslateUnit;
...
sText := Dictionary('new text to translate', UnitName);
...
end.
unit MyTranslateUnit;
function Dictionary(sTextToTranslate: string; sUnitName: string)
begin
// Here I need the UnitName of the caller
Result := ...
end;
end.
在我的程序中有很多地方我调用Dictionary(...)。如何避免将UnitName作为第二个参数传递?
是否可以在MyTranslateUnit中获取调用者的UnitName而无需第二个参数?
我想有一个像这样的功能
function Dictionary(sTextToTranslate:字符串)
2条答案
按热度按时间daolsyd01#
只要调用发生在类的方法内部,就可以简单地编写
UnitName
。每个 DelphiTObject
都提供了class function UnitName: string;
,它给出了声明类的单元的名称。这不会给予您有可能省略第二个参数,但是当单元被重命名或者代码在单元之间被复制或移动时,它简化了维护。
**编辑:**有一个真实的的肮脏的黑客,使这个工作没有第二个参数,它也只工作在一个类的方法。我建议把这个作为最后的手段!删除一个参数的好处很容易在未来适得其反。
像这样为TObject声明一个 class helper:
现在你可以调用类似
在任何方法中,
UnitName
给出了声明该方法所属类的单元。请注意,这意味着当前示例的类,而不一定是声明方法的某个继承类。我还应该提到,这个 * TObject* 的类助手不会干扰任何其他类的类助手,即使这些显然是从
TObject
继承的。u0njafvf2#
可能,但仅在每个单元中使用附加代码