Show/Hide Toolbars

XSharp

 

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