2.0.0.4 版引入了这一警告,以帮助您发现(内置)函数和方法之间的名称冲突。
以下代码演示了这一新警告:
FUNCTION Left(c AS STRING , dwLen AS INT) AS STRING
RETURN NULL
CLASS TestClass
METHOD Test(cPath AS STRING) AS STRING
Left(cPath , 1)
STATIC METHOD Left(c AS STRING,n AS Int32) AS STRING
// do something
RETURN NULL
END CLASS
在 TestClass:Test() 中调用 Left 时将产生警告:
方法 'Left' 产生歧义。可能是 ‘Functions.Left(string, int)’ 或 ‘TestClass.Left(string, int)’。使用函数是因为在 X# 中函数优先于静态方法。要调用方法,请使用完全限定的名称。
为了与 Visual Objects 兼容,我们改变了这一行为。在 Visual Objects 中,静态方法的概念并不存在,在这段代码中,您将始终调用 Left() 函数。
如果要调用类中的方法而不是函数,则需要将代码改为:
TestClass.Left(cPath , 1)
如果你修改了类中的代码,并将 Left() 作为实例方法,那么如果你想在类中调用该方法,就需要在调用 Left 的前缀加上 SELF:,就像下面的例子一样:
FUNCTION Left(c AS STRING , dwLen AS INT) AS STRING
RETURN NULL
CLASS TestClass
METHOD Test(cPath AS STRING) AS STRING
SELF:Left(cPath , 1)
METHOD Left(c AS STRING,n AS Int32) AS STRING
// Do something
RETURN NULL
END CLASS