2009-04-13 16 views
4

私はロブ・マイルでC#イエローブックと呼ばれる本を読んでいた。C#プログラムでプロパティを使用するか、get/setアクセサを使用する必要がありますか?私はこの文に出くわしたとき

プログラマーの愛新しい光沢のあるおもちゃを。彼らは非常に誇りを持って言語の機能を使用したいです。プロパティは、このようなビットにすることができます。プロパティ対getメソッドとsetメソッドを考えるとき、私はあなたがどこにいるのかを知っているので、古いメソッドの取得と設定の方法のファンです。一方、正しい方法で使用すると、プロパティによって生活が楽になる場所がわかります。

私は彼がこれによって何を意味するかは分かりません。あなたは何をお勧めしますか? MSは何を提案していますか?

+1

重複http://stackoverflow.com/questions/601621/properties-vs-methods/601649 – cletus

+0

.NETのプロパティについては、Javaでパフォーマンス上のオーバーヘッドが発生することはありません。 – Soviut

+1

@ソビエト:これらの存在しないJavaプロパティを意味しますか? – cletus

答えて

18

は、私はあなたがローマ人がそうであるように行う、非プログラミングのアドバイスローマの

のビットを検討すべきだと思います。

.NETには、すべてのライブラリ、デザイナー、およびコードジェネレータが組み込まれています。これは、プラットフォームの不可欠な部分です。通常のプロパティの代わりにget/setアクセサを使用すると、他のプログラマが期待しているものとはまったく異なる外観を持つライブラリが作成されます。

get/setアクセサを使用すると、さまざまなツールと互換性のないコードを作成する機会が増えます。例えば、そこには特殊なプロパティとフィールドがあり、特別な機能を提供する多くのツールがあります。同等の構成を持ちますが、ツールのサポートはありません。

+0

"get/setアクセサを使用すると、さまざまなツールと互換性のないコードを作成する可能性が高くなります。 - 確かに、そして "ツール"の非常に広い定義のために!例えば、WinForms/ASP.NET/WPFのデータバインディングを考えてみてください。 –

0

私はプロパティが大好きです。 「クラスライブラリの設計ガイドライン」では、プロパティを使用することをお勧めします(特に、他の状態とは独立した状態の場合)。

0

これについて考える最も良い方法は、実生活のオブジェクトとの比較を描くことです。現実の人が設計される必要があると言いましょう。髪の色、高さ、幅などに関して、あなたはあなたの属性を何と呼んでいますか?あなたがこれらの行について考え始めると、それぞれが自分の考え方を持っているので、もっと役に立つでしょう。

5

ロブ・マイルは誰か分かりませんが、あなたの見積もりが正確であれば、私はすでに彼を尊敬していません。

.NETのすべてにプロパティが使用されます。あなたのコードがプロパティを使用しない場合、それはコードの唯一のものではありません。

+4

私が推測しなければならないのは、1.0のリリース前(または7年前)に書かれた本の引用です。その時点で、あなたがダイハードのJavaプログラマであれば、より理解しやすいでしょう。 –

0

プロパティを使用しない場合は、.NETで非常に役立つと考えられる非常に目立つ機能が緩和されます。バインディング。 .NETのプロパティとのみバインドできます。したがって、get/setアクセサを使用すると、他のユーザーとうまく対話できません。対

2
myObject.Property++; 

myObject.SetProperty(myObject.GetProperty() + 1); 

うん..

明示ゲッター/セッターメソッドは、非自明な計算/処理が行われたときに使用されるべきであるので、実際のアクションが実行されます。

8

私は数年前にC#に移行したJavaプログラマとして本の一部を書きました。私は、次のバージョンのテキストを再訪して、少し明確にするつもりだと思う。

物を使うときにコードが実行されることをクラスのユーザーが認識していることを確認したい場合は、メソッドに入れることで明示的になります。さらに、メソッドを使用すると、例外をスローすることなくエラー条件を返すことができます。コンパイラはプロパティをメソッドに変換するので、パフォーマンスは低下しません。

私は、特に状態のようなものについては、私が書くコードで多くのプロパティを使用します。私は実際にプロパティを使用しないことを決して唱えていませんでした。さらに、適切な状況で適切なものを使用するようにしてください。

+0

著者自身を驚かせてください。ようやくStackoverflow ;-)へ – Kredns

+0

John SaundersのJonathanのコメントが本当に頭に釘を打ちました。 – Kredns

+0

プロパティをいつ使うべきか、メソッドをいつ使うべきかを知ることは、教えるのが良いことです。確かに、マイクロソフトでは、それぞれを使用する必要があるときはかなり明確にしています。ただし、プロパティの代わりにget/setメソッドを使用することを主張していたようですが、これはC#でうんざりしていました。もしあなたの意図でなければ、いくつかの明確化が必要でしょうか? –

関連する問題