プログラム初心者です。
いきなりC#から勉強するのは難度が高いかもしれませんが、
克服しないといけません。
分からないことがあります。
教えていただけますでしょうか。
例えばC#のプログラミングで使用する
getterとsetterについて初心者でも分かりやすく教えていただけないでしょうか。
"C#では変数に「プロパティ」を作ることができます…"とか
"フィールド(クラスのインスタンス変数)というのは、クラスの内部で持っている値です。
この内部の値に直接外部からアクセスさせてはいけません。
カプセル化では、フィールドへの読み書きは、必ずそのクラスのコードを経由して行います。
つまり、間接的に読み書きします。"とか書かれているものがありました。
この値はいかなるどういう値で、それを取得したい場合に使うのか
分かりません。正確にイメージできません。
あと以下の例文があったのですが、
valueというのはもともとどういう値が入っていて代入しているのですか?
宜しくお願いします。
public class Person
{
private string name;
public string Name;
{
get { return this.name; }
set { this.name = value; }
}
}
No.1ベストアンサー
- 回答日時:
あまりいい例ではないのだが:
例えばあなたの所持金を, あなたの「プロパティ」と考えてみましょうか. 何らかの事情でほかの人があなたの所持金を知らなければならないかもしれません. そのとき, あなたはほかの人があなたの所持金を自由に知ることができるようにしていますか? それとも, 「あなたに尋ねる」など一定の方法で知ることができるようにしていますか?
あるいは, 場合によってはあなたの所持金が変化することもあるでしょう. そのとき, ほかの人が勝手にあなたの所持金を増減させることができるようにしていますか? それとも, あなたの許可によって増やしたり減らしたるするようにしていますか?
下の例の value は setter のデフォルトの引数でしょう.
No.5
- 回答日時:
本来のオブジェクト指向の考え方では、「オブジェクトの状態を表すもの」をプロパティと呼称します。
例: オブジェクト「ファイル」の状態「最終更新日」
オブジェクト指向のプログラム言語において、このプロパティを実現するために「オブジェクト内の変数」の形式で使うのが一般的です。
File o = new File();
Date d = o.LastUpdateDate; // ここ
ですが、変数では正確な状態を取得できないケースがあるとします。
Date d = o.LastUpdateDate; // だれかに更新されたら古い情報になる
Date e = o.GetLastUpdateDate(); // 取得する処理が必要
そこで C# には「変数の様に操作できるオブジェクト」という機能があります。
public Date LastUpdateDate {
get { return this.GetLastUpdateDate(); }
}
Date d = o.LastUpdateDate; // 実は GetLastUpdateDate() の結果を取得している
この「変数の様に操作できるオブジェクト」を、プログラミング言語では「プロパティ」と呼びます。
区別する為に「オブジェクト内の変数」は「フィールド」となります。
しかし変数のように使うには、変数の「設定」と「参照」の二通りの使い方を真似しなければなりません。そのためプロパティには、設定を担当する getter メソッドと、参照を担当する setter メソッドが存在します。
まとめ
フィールド: オブジェクト内の変数
プロパティ: オブジェクト内の変数の様に操作できるオブジェクト
setter: プロパティにおける「変数の設定」を担当するメソッド
getter: プロパティにおける「変数の参照」を担当するメソッド
例題の name ですが、これは記述が省略されていますが setter メソッドの第一引数のことです。
No.2
- 回答日時:
>この値はいかなるどういう値で、それを取得したい場合に使うのか
>分かりません。正確にイメージできません。
想定外の値を勝手に書き換えられたり、秘密にしたい内容(相手)に勝手に見られないように……。
ってところでしょうかね。
変数の内容を覗いたり書き換えたりできる対象を制限したい場合とか。
入力の時点でエラーになる値を弾くようにしておけば、以降の処理を簡略化することができます。
たとえば日付を扱いたい時に西暦-6000年16月889日とかの入力をエラーに出来る。とか。
机の上に貴方の財布が置いてあります。
他人が勝手に財布を開けて飲み会の代金を徴収していった場合、貴方の知らないウチにお金が減っている事になります。
貴方に請求して貴方が財布からお金を取り出し払った場合なら、財布から幾らの現金が出ていったのかについては把握できますよね?
# seter相当。自前で処理しているのだから、収支については把握できます。
貴方に手持ちの金額を尋ねて(geter相当)、飲み代分が足りないとかなら「後日徴収する」とか対応も可能ですよね?
# 問い合わせ部分がgeter相当。財布内の現金額を知られたくない相手ならば答えない(あるいは嘘の金額を言う)などの制御が可能です。
>あと以下の例文があったのですが、
>valueというのはもともとどういう値が入っていて代入しているのですか?
seterの呼び出し元が設定した値を一時的に受け取る変数です。
よって、どんな値が入っているかは(呼び出し元)コード次第でしょう。
# その値が不正なのかどうかを判定してフィールドメンバに値を適用するかどうかを制御します。
# 掲示された例では未チェックですけどね。
外のクラスからはnameというフィールドには直接アクセスできません。(privateですから)
そんなワケで間接的にアクセスする為のseter/geterとしてNameというプロパティが用意された。
ということになります。
# もちろん、publicなフィールドも作れますけどね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
Excel VBAでWordの複数ファイル...
-
VBで引数にDictionaryオブジェ...
-
エクセルのVBAの標準モジュール...
-
エクセルVBAで配列内に空白デー...
-
AccessVBAで「dim dbs as datab...
-
「オブジェクト変数または With...
-
Excel VBA Collection.add で R...
-
vbaからIEを操作するための記載...
-
VBAについてです。 初心者です...
-
実行時エラー 3265「要求された...
-
UserForm1.Showでエラーになり...
-
PowerPointVBAでスライドマスタ...
-
EXCEL VBA オートシェイプナン...
-
エラー91 オブジェクト変数また...
-
エクセルVBAでcode128のバー...
-
VBScriptでファイルの日時順(降...
-
ExcelからAccessのデータを出力...
-
エクセルVBAで2つの画像を比較...
-
Excel VBAでIEにアクセスするプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
EXCEL VBA オートシェイプナン...
-
VBAからPDFファイルにパスワー...
-
VBAで Set wb = Sheets(1).Cop...
-
ある文字列が全て数字であるか...
-
PowerPointVBAでスライドマスタ...
-
[VBA]CDOメッセージ送信エラー
-
AccessVBAで「dim dbs as datab...
-
VBAで作成するメール(開封確認...
-
VBからPDFファイル自動生成...
-
上下の位置揃えについて
-
ExcelVBAでのNZ関数について
-
テキストボックス中の文字列の...
-
エクセルマクロエラー「'Cells'...
おすすめ情報