アプリ版:「スタンプのみでお礼する」機能のリリースについて

C#でのget setの意味、使い方を教えてください
初心者のため、調べても意味が良く分からず、またどういった場面で利用されるかも分かりません。
有識者の方、よろしくお願い致します。

A 回答 (2件)

C#のプロパティという機能はご存知でしょうか?


get、setは、プロパティを実装する際に利用するものです。
getは値の取得、setは値の設定をするものです。

get、setの意味というよりも、プロパティの意味を知ることが大切かと思います。

○意味

プロパティとは、クラスのメンバ変数であるかのようにアクセス可能でありながら、
処理の内容を自分で記述できる機能、、、です(@ITより)。

クラスのメンバ変数をpublicにして公開した場合、どうなるでしょう?
外部から好きなようにメンバ変数の値を変更することができてしまい、
オブジェクト指向という考え方から外れてしまいますよね。

例えばエレベータは、行きたい階のボタンを押せば勝手に運んでくれます。
利用する人は、「ボタンを押す」ということだけ知っていればよく、
ボタンが押された後にどのような仕組みで動くのかを知る必要はありません。

メンバ変数をpublicにして公開するというのは、エレベータの内部構造を公開し、
ボタンではなく、内部構造を直接いじって欲しいというのに似ています。
これだとエレベータが壊れてしまったり、正しく動かなかったりするのは明白です。

前置きが長くなりました^^;
このように、内部実装は隠蔽化すべきというのは分かっていただけたでしょうか。
C#のプロパティは、メンバ変数を隠蔽化する場合に利用する機能なのです。

○使い方

あるクラスに次のようなメンバ変数があったとします。

int code;

この変数は、0~1000までの整数が入るようにしたいという要件があったとします。

public int code;

としてしまうと、外部からcode変数を好き勝手いじられてしまうので、
0~1000までの整数が入るようにしたいという要件は満たせませんし、
そもそも、上記のようにメンバ変数を公開することは推奨されません。

この時、メンバ変数をプロパティとして隠蔽化します。

private int code;

public int Code
{
get
{
return this.code;
}
set
{
if(0 <= value && value <= 1000)
this.code = value;
}
}
※スペースが上手くいれられず申し訳ありません。

#1の方の回答にある

> 代入しようとする値が正しいかどうかチェックする

は、上記ようにsetの処理でチェックを行うことが出来るということです。

利用の仕方は、TextBoxなどのコントロールを使ったことであれば分かりますよね?

長くなってしまいまして、申し訳ありません。
疑問が解消されないようでしたら、その旨をおっしゃってくださいね。
    • good
    • 20
この回答へのお礼

なるほど・・・例えも分かりやすく教えていただきありがとうございます。よく理解できました。
あとは、うまくクラス設計が出来るようになって、最適に使いこなせるよう頑張りたいと思います。
ありがとうございました。

お礼日時:2008/11/04 16:57

メンバーへのアクセスのときに「処理を横取り」できます.


例えば, setter だと「代入しようとする値が正しいかどうかチェックする」ということができますね.
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!