質問: お世話になります。 初歩的な質問なのですがよろしくお願いします。 getアクセサーsetアクセサーについてなのですが 私の解釈だと クラス内でprivateに設定した変数を参照できるようにするためのプロパティだと思っています。 この場合、変数をpublicにした場合も同じではないのでしょうか?
回答: こんにちは。 > > 変数をpublicにした場合も同じ > > > この点については、その通りです。 プロパティのget/setアクセサはコンパイルされるとただのメソッドとなります。C#の記述上特別な方法でアクセスできるというだけなのです。 > > クラス内でprivateに設定した変数を参照できるようにするためのプロパティ > > > この解釈については、プロパティにはその一面もありますが、それだけが全てではないです。 プロパティはその名の通り、オブジェクトを外から見た場合に、そのオブジェクトが持つ情報、状態を表現するためのものです。 その中身は変数への参照である必要もなく、自分が持つ「状態」を表すために、特定の計算を含むことも可能です。 プロパティは、基本的にはgetのみを実装するもの(オブジェクトの状態を「見せる」ためのもの)であると考えると、プロパティと変数の違いが見えてくると思います。実際の変数の中身をそのまま公開する場合もあれば、見栄え良く「加工」して見せたい場合もあるはずです。 setは変数のセットではなく、「オブジェクトの形態に外から手を加える」ものであると考えましょう。与えられたパラメータをそのまま変数にセットする必要はないのです。 よって、プロパティは単なる変数とは違い、「どのように自身の状態を公開するかを自分で決められる高機能な変数のようなもの」であると理解しておけばまずは良いでしょう。オープンソースなライブラリのソースを見てみると、プロパティがどのような概念で、どのように使われるのかが分かってくると思います。