プロパティと私の反論に対するいくつかの議論は次のとおりです。
getterおよびsetterメソッドを書くよりも使いやすい
ゲッターメソッドとセッターメソッドのペアはコードのにおいです。これらの記述を簡単にすることは、Scantronフォームを使用してすべての「C」を入力することにより、数学テストに失敗しやすくするようなものです。永続化のために状態のみを含むオブジェクトは、getter / setterを使用してはならず、永続化時に不変オブジェクトを作成する必要があります。
オブジェクトのコンシューマーにとって重要なのは、オブジェクトが行う方法ではなく、オブジェクトが行うことです。その振る舞いはそれがすることです。その状態は、その方法です。オブジェクトの状態を気にかけている場合(永続性を除き、これもオブジェクト指向を破壊します)、OOPを実行せず、その利点を失います。
彼らは消費者にパフォーマンスの大まかな指標を与えます
これは、特定のプロパティについて、将来変更される可能性があるものです。リリース1.0で、PropertyXにアクセスするとフィールドが返されるだけだとします。リリース1.5では、フィールドがnullの場合、PropertyXはNull Objectパターンを使用して新しいnullオブジェクトを作成します。リリース2.0では、PropertyXのgetterメソッドによってフィールドがさらに検証されています。
プロパティがますます複雑になるにつれて、プロパティを使用することによるパフォーマンスの指標はますます真実になりそうです。
パブリックフィールドよりも優れている
これは本当です。しかし、メソッドもそうです。
これらはメソッドとは根本的に異なるオブジェクトの側面を表し、オブジェクトのすべてのコンシューマーはこれに注意する必要があります
上記のステートメントの両方が正しいと確信していますか?
入力しやすいです
確かに、タイピングmyObject.Length
はタイピングよりも簡単ですがmyObject.Length()
、それを少しの構文糖で修正することはできませんか?
プロパティの代わりにメソッドを使用する理由
パフォーマンスの保証はありません。メソッドがより複雑になっても、APIは真実のままです。消費者は、パフォーマンスの問題に直面している場合、コードをプロファイルする必要があり、APIに依存しません。
消費者が考えることは少なくなります。このプロパティにはセッターがありますか?メソッドは確かにそうではありません。
消費者は適切なOOPの考え方から考えています。APIのコンシューマーとして、オブジェクトの動作と対話することに興味があります。APIでプロパティを見ると、状態によく似ています。実際、プロパティの実行が多すぎる場合は、プロパティであってはなりません。したがって、実際には、APIのプロパティはコンシューマに表示される状態です。
APIのプログラマは、戻り値を持つメソッドについてより深く考え、可能であれば、そのようなメソッドでオブジェクトの状態を変更することを避けます。可能な限り、コマンドをクエリから分離する必要があります。
それでは、なぜメソッドの代わりにプロパティを使用するのですか?MSDNのほとんどのポイントは、それ自体がコードの匂いであり、プロパティにもメソッドにも属していません。
(CQSについて考えた後、これらの考えが浮かびました。)
type GetFoo() void SetFoo()
1万回書いたなら、それは完全に理にかなっています。C#コードを書いている間ずっと、プロパティに混乱することはありませんでした。