38

オブジェクト指向プログラミングに不慣れな友人が私にメンバーとプロパティの違いを尋ねました、そして私は彼に良い答えを与えることができなかったことを認めることを恥ずかしく思いました。プロパティ自体もオブジェクトになる可能性があるため、一般的な説明と例外のリストが残されました。

誰かが、メンバーとプロパティのどちらを検討するかについて、適切な定義を提示できますか?たぶん私は概念をろくでなしにしているのでしょうか、それともメンバーが私が使用する内部名であり、プロパティが他のオブジェクトに公開されているものであるというだけですか?

この質問への答えがわからないことが私のプログラミングの質に影響を与えたとは思いません。それは単なるセマンティクスのポイントですが、それでも彼に説明できないのは気になります。

4

9 に答える 9

67

プロパティは一種のメンバーです。他には、コンストラクター、メソッド、フィールド、ネストされた型、変換、インデクサーなどがあります。もちろん、言語/プラットフォームによって異なります。多くの場合、用語の正確な意味は文脈によって異なります。

C#固有の定義を与えるには、C#3.0仕様のセクション1.6.1から:

次の表に、クラスに含めることができるメンバーの種類の概要を示します。
(行...)

  • 定数
  • 田畑
  • メソッド
  • プロパティ
  • インデクサー
  • イベント
  • 演算子
  • コンストラクター
  • デストラクタ
  • タイプ

それはクラスのメンバーであることに注意してください。さまざまな「モノ」にはさまざまな種類のメンバーがあります。たとえば、C#では、インターフェイスにメンバーとしてフィールドを含めることはできません。

于 2009-08-05T18:45:01.947 に答える
9

オブジェクト指向プログラミングまたはオブジェクト指向設計では、2 つの用語のどちらにも定義された意味はありません。また、圧倒的多数のプログラミング言語では定義された意味もありません。

プロパティまたはメンバーと呼ばれる概念を持つプログラミング言語はごく少数であり、両方を持つプログラミング言語はさらに少数です。

2 つのうちのいずれかを持つ言語の例としては、C++ (メンバーを持つ)、ECMAScript (プロパティを持つ)、および C# (両方を持つ) があります。ただし、これらの用語は、異なるプログラミング言語で同じ概念を示すとは限りません。たとえば、「メンバー」という用語は、C++ と C# ではほぼ同じ意味ですが、「プロパティ」という用語は、ECMAScript と C# ではまったく異なる意味を持ちます。実際、ECMAScript の「プロパティ」という用語は、C++ および C# の「メンバー」という用語とほぼ同じ概念を表します (つまり、ほぼ同じことを意味します)。

これはすべて、これらの 2 つの用語が、プログラミング言語の関連する仕様が意味することを正確に意味していると言っているだけであり、それ以上でもそれ以下でもありません。(ルイス・キャロルの無償の引用をここに挿入します。)

于 2009-08-07T21:24:22.783 に答える
5

プロパティはメンバーの一種です。

たとえば、C# では、クラスは次のメンバーを持つことができます。

  • コンストラクター
  • デストラクタ
  • 定数
  • 田畑
  • メソッド
  • プロパティ
  • インデクサー
  • オペレーター
  • イベント
  • デリゲート
  • クラス
  • インターフェース
  • 構造体

MSDN: C#: クラス

于 2009-08-05T19:29:55.367 に答える
1

プロパティとメソッドの両方がオブジェクトのメンバーです。プロパティは、メソッドが所有するオブジェクトにアクセスまたは使用するときに、オブジェクトのある側面を記述します。
擬似コードの例:

Object Ball
Property color(some Value)
Method bounce(subroutine describing the movement of the Ball)

ボールが定義され、色(プロパティ)が与えられているときに、メソッドbounceは、別のオブジェクトに当たったときにボールがどのように反応するかを説明するサブルーチンです。
すべての言語にプロパティがあるわけではありません。つまり、Javaには、ゲッターとセッターがアクセスする必要のあるフィールドしかありません。

于 2009-08-05T19:06:59.670 に答える
1

メンバーは、クラスに属する単なるオブジェクトまたはプリミティブ型です。

プロパティは、メンバーよりも強力です。これは、ゲッターとセッターを作成する簡単な方法のようなもので、たとえば、パブリックゲッターとプライベートセッターを作成できます。読み取りまたは書き込みの方法で、必要なロジックを配置します。これらはメンバーを公開する方法として使用でき、後で読み取りと書き込みのポリシーをより簡単に変更できます。

これはC#に適用されます。ただし、これが他の言語に当てはまるかどうかはわかりません。

于 2009-08-05T18:45:54.050 に答える
1

メンバー(変数)は、オブジェクトの一部にすぎません。プロパティは(これを「通常」で修飾します。複数の言語で明確な意味を持つ技術的に明確な単語かどうかはわかりません)は、getterメソッドやsetterメソッドなどを介して、オブジェクトの公的にアクセス可能な側面です。

したがって、(ほとんどの場合)プロパティは到達可能なメンバー変数ですが、実際にはオブジェクトの状態の一部ではないプロパティを持つことができます(これは優れた設計ではありません)。

public class Foo {
  public String getJunk()
  { return "Junk";}

  public void setJunk(String ignore){;}
  }
}
于 2009-08-05T18:46:27.747 に答える
1

プロパティはフィールドを公開する方法であり、フィールドは実際の変数です。例(C#):

class Foo {
  private int field;
  public int Property {
    get { return field; }
    set { field = value; }
  }
}
于 2009-08-05T18:46:36.967 に答える