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

时间:2013-07-16 15:50:24

标签: delphi

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

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

1 个答案:

答案 0 :(得分:10)

不,没有。如果在单元myFunction中声明了标识符(例如函数,例如foo),那么在另一个单元bar中,您可以在不添加myFunction的情况下使用foousesimplemantation部分的interface条款中MyFunc

一些讨论

假设您有两个函数foo,一个在bar中,一个在foo中。假设你在add。如果您没有uses禁止其中一个MyFunc列表,则foo.MyFunc将引用bar,您无法访问其他功能。如果您将uses添加到其中一个MyFunc列表中,那么foo.MyFunc仍将引用本地函数bar.MyFunc,但您可以通过编写foo.MyFunc来访问另一个}。为了降低混淆的风险,您可以选择始终明确并写下bar.MyFuncMyFunc,而不仅仅是ident

一个常见的情况是:foobar都有一个标识符MyUnit(它们可能非常不同),在foo中,您同时拥有某些bar列表中的usesMyUnit。然后,在ident中,foo.ident会引用bar.identfoo.ident,具体取决于使用条款中最后一个单位。要使用另一个,您必须明确该单位(如bar.identfoo.ident)。当然,为了降低犯错的风险,您可以始终明确(例如,即使foo最后一次,也请写ident,以便foo.ident也引用Windows.TBitmap

常见的错误是将Graphics.TBitmapTBitmap混为一谈。通常情况下,Graphics.TBitmap表示Windowsuses单位通常在{{1}}条款的早期出现)。这种困惑已在SO处理过。