C#でget/setを使う方法【C#のプロパティ】

C#を使っていると、「get/set」で書かれたコードを見る機会も多くあると思います。これらはプロパティと呼ばれるメソッドなのですが、「いまいちプロパティを理解していない……」と感じている方もいるのではないでしょうか。
この記事では、実際にget/setを利用しながらプロパティについて分かりやすく解説していきたいと思います。参考になれば幸いです。
- PM
- get/setは、隠蔽されているメンバ変数を取得・変更するためのメソッド(アクセサ)ですよ。
- PG
- なるほど。確かに、勝手に値が変更されていたらシステム上怖いですもんね。
C#のプロパティとは?
はじめに、C#のプロパティの概要について理解していきましょう。
プロパティとは、「メンバ変数の値を取得したり変更したりするための特殊なメソッド」で、アクセサと呼ばれたりもします。
※メンバ変数:クラスに定義されている変数。
例えるならば、メンバ変数にアクセスするための「窓口」のようなものです。
水族館や動物園に入場するとき、必ず窓口でチケットを購入してから場内に入ります。
反対に窓口を通さなければ、営業時間外に誰か怪しい人が入ってきてしまう可能性があります。これを防ぐために、プロパティはこの「窓口」の役割を果たしているのです。
C#でget/setを使ってみよう
プロパティについて理解できたところで、ここでは実際にget/setを使う方法を見ていきたいのですが、その前に基本ルールだけ確認しておきましょう。
- アクセス修飾子:どこからアクセスできるかを指定する
- get:メンバ変数の値を取得するためのアクセサ
- set:メンバ変数の値を設定するためのアクセサ
アクセス修飾子には「public」「protected」「private」「修飾子なし」の4種類がある
そして以下が、年齢を取得するサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PropertySample { class Program { static void Main(string[] args) { Human n = new Human(); // setアクセサが呼ばれる n.SetAge(24); // getアクセサが呼ばれる int age = n.GetAge(); Console.WriteLine("年齢は" + age + "歳です"); Console.ReadLine(); } } class Human { // メンバ変数はprivateに設定 private int age = 20; // 外部からの取得用(publicに設定) public int GetAge() { return age; } // 外部からの設定用(publicに設定) public void SetAge(int num) { age = num; } } } |
実行結果
- PG
- get/setを使うのにはきちんとした理由があるんですね。
- PM
- そうですね。システムを作る上では必須の機能なんですよ!
get/setでメンバ変数へのアクセスを制限しよう
ここでは、C#のプロパティの概要やget/setの使い方について解説していきました。get/setを使うと、アクセス修飾子によってメンバ変数を隠ぺいすることができ、他のクラスから勝手に値を操作されることによるリスクを避けることができます。また、「get~」「set~」とコードが記述されていれば、自分以外の人がコードを読むときにも、どこで値を取得してどこで値をセットしているのかが分かりやすくなります。リスクを避けコードの可読性を上げるためにも、ぜひget/setの使い方をマスターしておきましょう。