75

クラスのインスタンスの" is mapsed? " 状態を公開する必要があります。結果は基本的なチェックによって決定されます。単にフィールドの値を公開するだけではありません。読み取り専用プロパティとメソッドのどちらを使用する必要があるかわかりません。

読み取り専用プロパティ:

public bool IsMapped
{
    get
    {
        return MappedField != null;
    }
}

方法:

public bool IsMapped()
{
    return MappedField != null;
}

MSDN の「プロパティとメソッドの選択」を読みましたが、まだ確信が持てません。

4

12 に答える 12

7

私は物件に行きます。主に、参照されている MSDN 記事の最初のセンテンスが原因です。

一般に、メソッドはアクションを表し、プロパティはデータを表します。

于 2013-05-30T06:54:34.223 に答える
5

この場合、それがプロパティであることは明らかです。これは単純なチェックであり、ロジックも副作用もパフォーマンスへの影響もありません。そのチェックよりもはるかに簡単にはなりません。

編集:

上記のいずれかがあり、それをメソッドに入れる場合、そのメソッドには is や has のような助動詞ではなく、強い動詞を含める必要があることに注意してください。メソッド何かを行います。動詞で始まる限り、VerifyMapping、DeterminMappingExistance、またはその他の名前を付けることができます。

于 2013-05-30T06:54:13.633 に答える
5

あなたのリンクのこの行が答えだと思います

メソッドはアクションを表し、プロパティはデータを表します。

ここにはアクションはなく、データの一部です。だからそれはプロパティです。

于 2013-05-30T06:54:31.060 に答える
4

これらの構造の両方にアクセスできる状況/言語では、一般的な区分は次のとおりです。

  • リクエストがオブジェクトの何かに対するものである場合、プロパティ (またはフィールド) を使用します。
  • リクエストがオブジェクトの実行結果に対するものである場合、メソッドを使用します。

もう少し具体的に言うと、プロパティは、プロパティを公開するオブジェクトが (消費目的で) 所有するデータ メンバーに、読み取りおよび/または書き込みの方法でアクセスするために使用されます。プロパティは、データが常に永続的な形式で存在する必要がないため、フィールドよりも優れています (このデータ値の計算または取得について「怠惰」になることができます)。また、この目的ではメソッドよりも優れています。パブリック フィールドであるかのようにコードで使用できます。

ただし、プロパティによって副作用が発生することがあってはなりません (ただし、返される値を永続化するための変数を設定することは、理解できる例外であり、何度も必要な値の再計算を回避する必要があります)。それらは、他のすべてのものが等しい場合、決定論的な結果を返す必要があり (したがって、NextRandomNumber はプロパティの概念として不適切な選択です)、計算によって、他の計算に影響を与える状態データが変更されてはなりません (たとえば、PropertyA の取得とこの順序での PropertyB は、PropertyB を取得してから PropertyA を取得する場合と異なる結果を返すことはありません)。

メソッド OTOH は、概念的には、何らかの操作を実行して結果を返すものと理解されています。つまり、戻り値の計算の範囲を超えて拡張される可能性のある何かを実行します。したがって、メソッドは、値を返す操作に追加の副作用がある場合に使用されます。戻り値はまだ何らかの計算の結果である可能性がありますが、メソッドがそれを非決定論的に計算したか (GetNextRandomNumber())、または返されたデータがオブジェクトの一意のインスタンスの形式であり、メソッドを再度呼び出すと、同じデータを持っている場合でも異なるインスタンス (GetCurrentStatus())、またはメソッドが状態データを変更して、まったく同じことを連続して 2 回実行すると異なる結果が生成される場合があります (EncryptDataBlock();

于 2013-05-30T20:35:53.883 に答える
3

値を取得するためにパラメータを追加する必要がある場合は、メソッドが必要です。それ以外の場合は、プロパティが必要です

于 2013-05-30T06:54:31.073 に答える
2

IMHO 、最初の読み取り専用プロパティは正しいです IsMapped オブジェクトの属性として、アクションを実行していないため(評価のみ)、1日の終わりには既存のコードベースとの一貫性がおそらくそれ以上にカウントされますセマンティクス....これがuni割り当てでない限り

于 2013-05-30T06:58:09.723 に答える
1

フィールドの詳細を返すだけなので、プロパティを期待します。一方、私は期待するだろう

MappedFields[] mf;
public bool IsMapped()
{
     mf.All(x => x != null);
}
于 2013-05-30T07:34:17.107 に答える
0

c#にはこの理由でプロパティがあるため、プロパティを使用する必要があります

于 2013-05-30T12:09:22.340 に答える