在C ++中,如果我必须从另一个命名空间调用一个函数,比如foo
,我有两个选择:在我的代码上面添加using namespace foo;
或在执行调用时指定命名空间,是foo::myFunction()
。
在Delphi中,是否有与第二种替代方案相对应的构造?
答案 0 :(得分:10)
不,没有。如果在单元myFunction
中声明了标识符(例如函数,例如foo
),那么在另一个单元bar
中,您可以在不添加myFunction
的情况下使用foo
在uses
或implemantation
部分的interface
条款中MyFunc
。
一些讨论
假设您有两个函数foo
,一个在bar
中,一个在foo
中。假设你在add
。如果您没有uses
禁止其中一个MyFunc
列表,则foo.MyFunc
将引用bar
,您无法访问其他功能。如果您将uses
添加到其中一个MyFunc
列表中,那么foo.MyFunc
仍将引用本地函数bar.MyFunc
,但您可以通过编写foo.MyFunc
来访问另一个}。为了降低混淆的风险,您可以选择始终明确并写下bar.MyFunc
和MyFunc
,而不仅仅是ident
。
一个常见的情况是:foo
和bar
都有一个标识符MyUnit
(它们可能非常不同),在foo
中,您同时拥有某些bar
列表中的uses
和MyUnit
。然后,在ident
中,foo.ident
会引用bar.ident
或foo.ident
,,具体取决于使用条款中最后一个单位。要使用另一个,您必须明确该单位(如bar.ident
或foo.ident
)。当然,为了降低犯错的风险,您可以始终明确(例如,即使foo
最后一次,也请写ident
,以便foo.ident
也引用Windows.TBitmap
)
常见的错误是将Graphics.TBitmap
与TBitmap
混为一谈。通常情况下,Graphics.TBitmap
表示Windows
(uses
单位通常在{{1}}条款的早期出现)。这种困惑已在SO处理过。