これらの構造の両方にアクセスできる状況/言語では、一般的な区分は次のとおりです。
- リクエストがオブジェクトの何かに対するものである場合は、プロパティ (またはフィールド) を使用します。
- リクエストがオブジェクトの実行結果に対するものである場合は、メソッドを使用します。
もう少し具体的に言うと、プロパティは、プロパティを公開するオブジェクトが (消費目的で) 所有するデータ メンバーに、読み取りおよび/または書き込みの方法でアクセスするために使用されます。プロパティは、データが常に永続的な形式で存在する必要がないため、フィールドよりも優れています (このデータ値の計算または取得について「怠惰」になることができます)。また、この目的ではメソッドよりも優れています。パブリック フィールドであるかのようにコードで使用できます。
ただし、プロパティによって副作用が発生することがあってはなりません (ただし、返される値を永続化するための変数を設定することは、理解できる例外であり、何度も必要な値の再計算を回避する必要があります)。それらは、他のすべてのものが等しい場合、決定論的な結果を返す必要があり (したがって、NextRandomNumber はプロパティの概念として不適切な選択です)、計算によって、他の計算に影響を与える状態データが変更されてはなりません (たとえば、PropertyA の取得とこの順序での PropertyB は、PropertyB を取得してから PropertyA を取得する場合と異なる結果を返すことはありません)。
メソッド OTOH は、概念的には、何らかの操作を実行して結果を返すものと理解されています。つまり、戻り値の計算の範囲を超えて拡張される可能性のある何かを実行します。したがって、メソッドは、値を返す操作に追加の副作用がある場合に使用されます。戻り値はまだ何らかの計算の結果である可能性がありますが、メソッドがそれを非決定論的に計算したか (GetNextRandomNumber())、または返されたデータがオブジェクトの一意のインスタンスの形式であり、メソッドを再度呼び出すと、同じデータを持っている場合でも異なるインスタンス (GetCurrentStatus())、またはメソッドが状態データを変更して、まったく同じことを連続して 2 回実行すると異なる結果が生成される場合があります (EncryptDataBlock();