7

在 C++ 中,如果我必须从另一个命名空间调用函数,比如foo.,我有两个选择:添加using namespace foo;上面的代码或在执行调用时指定命名空间,即foo::myFunction().

在 Delphi 中,是否有对应于第二种选择的构造?

4

1 回答 1

10

不,没有。myFunction如果在 unit 中声明了标识符(例如函数, like ) foo,那么在不同的 unit 中,例如,如果不添加到the或section中的子句bar,则无法使用。myFunctionfoousesimplemantationinterface

一些讨论

假设您有两个函数MyFunc,一个 infoo和一个 in bar。假设你在foo. 如果您不add限制其中一个uses列表,MyFunc则将引用foo.MyFunc,并且您无法访问其他功能。如果您添加bar到其中一个uses列表,那么MyFunc仍然会引用本地函数foo.MyFunc,但您可以通过编写访问另一个bar.MyFunc。为了减少混淆的风险,您可以选择始终明确并编写foo.MyFuncand bar.MyFunc,而不是仅编写MyFunc

一个常见的场景是这样的:你ident在两者中都有foo一个标识符bar(它们可能非常不同),而在 中MyUnit,你在某个列表中同时拥有foo和。然后, in将引用或,具体取决于使用子句中的最后一个单元。要使用另一个,您必须明确说明单位(如或)。当然,为了减少犯错的风险,你可以总是明确的(例如写即使最后出​​现,所以也指代)。barusesMyUnitidentfoo.identbar.identfoo.identbar.identfoo.identfooidentfoo.ident

一个常见的错误是Windows.TBitmapGraphics.TBitmap. 通常,TBitmapGraphics.TBitmapWindows单位通常出现在uses从句的前面)。这种混乱已在 SO 得到处理。

于 2013-07-16T15:51:25.863 回答