从"其他单位"调用程序而不"使用"

Pao*_*o M 7 delphi

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

在Delphi中,是否有与第二种替代方案相对应的构造?

And*_*and 10

不,没有.如果一个标识符(例如,功能,如myFunction)在单元中声明foo,则在不同的单元,bar比方说,则不能使用myFunction不添加foouses无论是在条款implemantationinterface章节.

一些讨论

假设你有两个函数MyFunc,一个是in foo,一个是in bar.让我们说你在foo.如果您不add禁止其中一个uses列表,那么MyFunc将参考foo.MyFunc,而您无法访问其他功能.如果添加bar到其中一个uses列表,那么MyFunc仍将引用本地函数foo.MyFunc,但您可以通过写入访问另一个bar.MyFunc.为了减少混淆的风险,你总是可以选择是明确的,写foo.MyFuncbar.MyFunc,决不只MyFunc.

一个常见的情况是这样的:你有一个标识符,ident在这两个foobar(他们可能是非常不同的),和MyUnit,你都foobar一些uses列表.然后,in MyUnit,ident将引用foo.identbar.ident,取决于使用条款中最后一个单位.要使用另一个,您必须明确单位(如foo.identbar.ident).当然,为了减少犯错的风险,你可以永远明确(例如,foo.ident即使foo是最后一次写,所以ident也指foo.ident).

一个常见的错误就是混淆Windows.TBitmap使用Graphics.TBitmap.通常,TBitmapGraphics.TBitmap(Windows单位通常在uses条款中提前).这种困惑已在SO处理.