【问题标题】:Ambiguity between Static and Instance Code静态代码和实例代码之间的歧义
【发布时间】:2012-09-07 18:53:40
【问题描述】:

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

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

这是错误:

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

【问题讨论】:

    标签: c# visual-studio-2010 oop


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      这段sn-p的代码清楚地说明了问题:

      bool b = item.IsShipped;
      Func<string, bool> d = item.IsShipped;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 2020-07-03
        • 2012-01-17
        • 1970-01-01
        • 2012-10-04
        相关资源
        最近更新 更多