在 C++ 中,如果我必须从另一个命名空间调用函数,比如foo
.,我有两个选择:添加using namespace foo;
上面的代码或在执行调用时指定命名空间,即foo::myFunction()
.
在 Delphi 中,是否有对应于第二种选择的构造?
在 C++ 中,如果我必须从另一个命名空间调用函数,比如foo
.,我有两个选择:添加using namespace foo;
上面的代码或在执行调用时指定命名空间,即foo::myFunction()
.
在 Delphi 中,是否有对应于第二种选择的构造?
不,没有。myFunction
如果在 unit 中声明了标识符(例如函数, like ) foo
,那么在不同的 unit 中,例如,如果不添加到the或section中的子句bar
,则无法使用。myFunction
foo
uses
implemantation
interface
一些讨论
假设您有两个函数MyFunc
,一个 infoo
和一个 in bar
。假设你在foo
. 如果您不add
限制其中一个uses
列表,MyFunc
则将引用foo.MyFunc
,并且您无法访问其他功能。如果您添加bar
到其中一个uses
列表,那么MyFunc
仍然会引用本地函数foo.MyFunc
,但您可以通过编写访问另一个bar.MyFunc
。为了减少混淆的风险,您可以选择始终明确并编写foo.MyFunc
and bar.MyFunc
,而不是仅编写MyFunc
。
一个常见的场景是这样的:你ident
在两者中都有foo
一个标识符bar
(它们可能非常不同),而在 中MyUnit
,你在某个列表中同时拥有foo
和。然后, in将引用或,具体取决于使用子句中的最后一个单元。要使用另一个,您必须明确说明单位(如或)。当然,为了减少犯错的风险,你可以总是明确的(例如写即使最后出现,所以也指代)。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
从句的前面)。这种混乱已在 SO 得到处理。