13

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

我真的不明白为什么 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;
}

这是错误:

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

截屏

4

2 回答 2

10

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

Func<string, bool> myFunction = item.IsShipped;

鉴于不需要用括号实际调用该方法,因此无法确定是否item.IsShipped应该引用方法组IsShipped或作为 property IsShipped

即使允许,也可能会导致混乱。从代码维护的角度来看,最好为属性/方法使用不同的名称,即使编译器足够聪明,知道何时使用哪一个(或者更糟糕的是,如果它只是任意选择一个)。

于 2012-09-07T18:57:11.823 回答
8

您可以重载具有不同签名的方法,但不能拥有与方法同名的字段或属性。

这是因为方法的原始名称计算为方法组,在创建委托时使用。

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

bool b = item.IsShipped;
Func<string, bool> d = item.IsShipped;
于 2012-09-07T18:57:03.647 回答