13

クラスには 2 つの項目があります。1 つはパブリック プロパティで、もう 1 つはパラメーターを受け取る静的メソッドです。

Visual Studio 2010 がこれら 2 つの項目の違いを認識できない理由がよくわかりません。

誰かが私にこれを説明してもらえますか?

コードは次のとおりです。

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それともプロパティであるのかを判断する方法はありませんIsShipped

仮に許したとしても、混乱を招きそうな点です。コードのメンテナンスの観点からは、プロパティ/メソッドに異なる名前を付けることが望ましいでしょう.

于 2012-09-07T18:57:11.823 に答える
8

メソッドを異なるシグネチャでオーバーロードできますが、メソッドと同じ名前のフィールドまたはプロパティを持つことはできません。

これは、メソッドの生の名前が、デリゲートの作成時に使用されるメソッド グループに評価されるためです。

このコード スニペットは、問題を明確に示しています。

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