この質問は複数の言語にまたがることができると思いますが、C#では具体的にはfield(ex:private int a;
)とa property(ex:private int b { get; set; }
)。多くの場合、どちらか一方を選択することには十分な理由がありますが、多くの場合、それらは交換可能に使用でき、同じ目的を果たし、どちらを選択するかは単なる慣例の問題です。
これらの異なる概念の両方を含む包括的な用語はありますか? 「プロパティまたはフィールド」とは言わずに「プロパティまたはフィールド」を意味するものは何か? 「変数」という単語は機能する可能性がありますが、関数スコープの変数も含まれており、技術的にプロパティが含まれているかどうかもわかりません。
値をクラススコープのデータ構造に格納する必要があるときに使用できるWordが必要ですが、フィールドとプロパティのどちらでもかまいません。
いいえ、ありません。「フィールド」という用語だけが、あなたが何を求めているかを正しく説明しています。
プロパティは何よりもまずfunctions( "getter"と "setter"のペアの代替)として見られるべきであり、フィールドの直接的な代替ではないと思います。 自動プロパティ(バージョン3.0より前のC#言語の一部ではありませんでした)は、内部に非表示のプライベートフィールドを作成しますが、それでも保存するフィールドです。値。
OOモデリングからのより一般的で言語に依存しない用語は メンバー変数 です。「フィールド」よりも一般的な用語を好む場合は、それを使用できます。
[...]多くの場合、これらの[プロパティまたはフィールド]は交換可能に使用でき[...]、それらの間の選択は慣例の問題です。
それは「慣習の問題」ではありません。ほとんどの場合、フィールドとプロパティは交換可能です。私が考えることができる唯一のケースは、_public readonly
_(または_public const
_)がゲッターのみのプロパティと交換可能である場合です。
パブリックプロパティはカプセル化をサポートします。セッターで新しい値を確認し、許容できない場合は例外をスローできます。パブリックフィールドではそれができません。
プロパティまたはフィールドを意味するプログラミング用語はありますか?
「プロパティまたはフィールド」と呼ばれます。そのまま使用するのに十分短い。 [ このコメント に触発されました。]
edit:
...またはさらに短い。用語が使用される例文は次のとおりです。
「ChildDialogクラスのプロパティまたはフィールドにデータを保存すると、StartAsyncでそのデータにアクセスできるようになります。」 [ 別の回答の下のO.P.のコメントから ]
これは、データがオブジェクトから読み取られる方法に関する詳細を削除しても機能しますが、文はその意味と意図をすべて保持しています。したがって、「ChildDialogクラスにデータ[または状態]を保存すると、StartAsyncでそのデータにアクセスできるようになります。」という文は、プロパティを介してデータにアクセスするか、生のフィールドを介してアクセスするかという意図を意味します1、またはゲッターメソッドGetData(...)
。
1しないでください。上記を参照。
古いOO本で「クラスメンバー」を見たことがあります。あなたが書いている文章から文章や段落を投稿すると、最も適切なWordを見つけやすくなります。
多くの場合、どちらか一方を選択することには十分な理由がありますが、それらは交換可能に使用でき、同じ目的を果たし、どちらを選択するかは慣例の問題です。
私はこの主張に異議を唱えます。フィールドは変数です。それらはオブジェクトの状態です。プロパティはカプセル化メカニズムです。いくつかの単純なユースケースでは同じ目的を果たすことができますが、プロパティの力はそれらの単純なケースをはるかに超えています。
プロパティはインターフェース内で定義できます。これらは3つの状態の1つとして定義できます。読み取り専用、読み取り/書き込み、書き込み専用。これらの読み取り状態と書き込み状態は、異なるアクセシビリティレベルを持つことができます。使用時にコードを実行できます。上記のいずれもフィールドには適用されません。
フィールドとプロパティを説明する用語を探しますが、他のメンバーを除外することは、それらが同等であると誤って仮定するため、特別な共通名に値することになります。それらは同等ではないため、排他的な一般名に値しません
フィールドとプロパティの間で同様の区別があったpythonでは(Pythonは2つを切り替えるために再コンパイルする必要はありませんが)、包括的用語は通常「属性」です。
プロパティはデータを格納しません。プロパティの背後にある非表示のバッキングフィールドはデータを格納します。プロパティは、そのフィールドにアクセスする方法を提供します。
C#構文のため、変数とプロパティの区別はなくなります。しかし、プロパティとフィールドは2つの非常に異なる獣です。プロパティはメソッドのようなものであり、変数のようなものです。
一般に、プロパティはクラスのインターフェースの一部であり、フィールドはクラスの状態の一部です。これがプロパティのいいところです。ゲッターとセッターを変更しても、クラスの外部表現は同じです。