読み取り専用のプロパティとメソッドのどちらを使用するか?
質問
私は " を公開する必要があります。 はマップされていますか? "クラスのインスタンスの状態を公開する必要があります。 結果は基本的なチェックで決定されます。それは ではない 単にフィールドの値を公開しているだけです。 読み取り専用のプロパティを使うべきか、メソッドを使うべきか、迷っています。
読み取り専用のプロパティです。
public bool IsMapped
{
get
{
return MappedField != null;
}
}
メソッドです。
public bool IsMapped()
{
return MappedField != null;
}
私は、MSDN の プロパティとメソッドの選択 を読みましたが、まだよくわかりません。
どのように解決するのですか?
C#の規格では
§ 8.7.4
A プロパティ は、オブジェクトまたはクラスの特性へのアクセスを提供するメンバです。プロパティの例としては、文字列の長さ、フォントの大きさ、ウィンドウのキャプション、顧客の名前、などがあります。プロパティは、フィールドの自然な延長線上にあります。どちらも関連する型を持つ名前付きメンバーであり、フィールドとプロパティにアクセスするための構文は同じです。しかし、フィールドとは異なり、プロパティは保存場所を示すものではありません。その代わり、プロパティには、その値が読み込まれたり書き込まれたりしたときに実行されるステートメントを指定するアクセサがあります。
と定義されているのに対し、メソッドは
§ 8.7.3
A メソッド は、オブジェクトまたはクラスによって実行される計算またはアクションを実装するメンバです。メソッドには正式なパラメータのリスト(空の場合もある)、戻り値(メソッドの戻り値が void でない限り)があり、静的または非静的のどちらかです。
プロパティ と メソッド を実現するために使用されます。 カプセル化 . プロパティはデータをカプセル化し、メソッドはロジックをカプセル化します。そして、データを公開する場合は、読み取り専用のプロパティを選択する必要があるのは、このためです。あなたのケースでは、オブジェクトの内部状態を変更するロジックはありません。あなたは オブジェクトの特性へのアクセスを提供する .
自分のオブジェクトのインスタンスがあるかどうか
IsMapped
であるかどうかは、あなたのオブジェクトの特性です。チェックが含まれていますが、それにアクセスするためにプロパティがあるわけです。プロパティはロジックを使って定義することができますが、ロジックを公開するべきではありません。ちょうど、最初の引用で述べた例のように。を想像してみてください。
String.Length
プロパティを想像してみてください。実装によっては、このプロパティは文字列をループして文字を数えるかもしれません。また、これは操作を実行しますが、外部からはオブジェクトの内部状態/特性に対するステートメントを与えるだけです。
関連
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] C#でメソッドをパラメータとして渡す
-
[解決済み] by lazy" と "lateinit" を使ったプロパティの初期化
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み] 2つのリストを結合する
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】プロセスが実行されているかどうかを知るには?