静态和实例代码之间的歧义

jp2*_*ode 13 c# oop visual-studio-2010

我的课程中有两个项目:一个是公共属性,另一个是带参数的静态方法.

我真的不明白为什么Visual Studio 2010无法看到这两个项目之间的区别.

有人可以向我解释这个吗?

这是代码:

public bool IsShipped {
  get {
    #region ' Test Code '
    if (!String.IsNullOrEmpty(TrailerNo) || (TruckDate != Global.NODATE)) {
      return true;
    }
    #endregion
    return false;
  }
}

public static bool IsShipped(string boxNumber) {
  var array = GetCrate(boxNumber);
  if (array != null) {
    foreach (var item in array) {
      if (item.IsShipped) {
        return true;
      }
    }
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

错误1'AcpClasses.AcpPackNShip.IsShipped'和'AcpClasses.AcpPackNShip.IsShipped(string)'C:\ Users\cp-jpool\My Projects\VS\Live\Common\Classes\AcpPackShip.cs之间的歧义242 20 CoilPC

截图

Ser*_*rvy 10

可以将方法称为委托,而不仅仅是通过调用它.例如,以下可能是该方法的有效使用:

Func<string, bool> myFunction = item.IsShipped;
Run Code Online (Sandbox Code Playgroud)

假定该方法不需要用括号实际调用,则无法确定是否item.IsShipped应该引用方法组作为IsShipped属性IsShipped.

即使它被允许,也可能导致混乱.从代码维护的角度来看,对于属性/方法具有不同的名称将是优选的,即使编译器在某种程度上足够聪明以知道何时使用(或者更糟的是,如果它只是任意选择一个).


Ben*_*igt 8

您可以使用不同的签名重载方法,但不能使用与方法同名的字段或属性.

这是因为方法的原始名称评估为创建委托时使用的方法组.

这段代码清楚地显示了问题:

bool b = item.IsShipped;
Func<string, bool> d = item.IsShipped;
Run Code Online (Sandbox Code Playgroud)