こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。
今回はC#で便利な機能の一つ「プロパティ」についてお話していきます。
利用する際に注意したい、初期化の仕方や取得方法などの解説と「プロパティ」を使うメリットも見ていきましょう。
【C#】プロパティとは?
プロパティとは、【Java】や【C++】にはない機能でクラス外側から見るとメンバー変数のように振る舞いますが、クラスの内側から見るとメソッドのように振舞うものです。
【Java】や【C++】がこの機能を持ってないことからも推測できるのですが、 プロパティは「オブジェクト指向言語に必須の機能」ということではありません。
【C#】プロパティを使うことのメリット
プロパティを使うことにより、Get用のメソッドとSet用のメソッドを用意することなく、1つの名前でgetとsetの記述することが可能となります。
また、.NetのWindowsFormApplicationやWPFなどの「データバインディング」という機能を使うにはプロパティが必要になります。
C# get set とは?
まずは、サンプルコードを見てください。
public int PropertyInt{ set; get;}
これはシンプルなint型のプロパティです。
この記述の中に「set; get;」ところを見てください。
これは、
という意味になります。
例えば、このコードの「set;」の記述を消すとこのプロパティは値の取得(get)しかできなくなります。
【C#】プロパティの書き方
using System;
//プロパティを記述するクラス
public class PropertyCls {
// メンバ変数は外部から隠蔽(privateに)しておき、直接アクセスできないようにする
private int propertyInt;
// 変数の取得・変更用のプロパティ
public int PropertyInt
{
set{ propertyInt = value; } //値の代入
get { return propertyInt; } //外部に値を返す
}
}
class Program { //プロパティを利用するクラス
static void Main() {
PropertyCls p = new PropertyCls(); //インスタンスを生成
p.PropertyInt = 32; //値を代入(setを呼ぶ)
Console.WriteLine(p.PropertyInt); //値を取得(getを呼ぶ)
}
}
実行結果 :
32
上記のように、プロパティを使うことで値の取得と設定を「set{}」と「get{}」だけで記述する事ができます。
また、利用者側のクラスでは変数に直接アクセスしているかのように「インスタンス.プロパティ名」だけでアクセスでき、値のやりとりができるようになるのがプロパティのメリットと言えますね。
書き方としてまずプロパティを記述するクラスでは
アクセスレベル型 プロパティ名{}
で宣言し、その中に「set{}」と「get{}」を記述します。
setの中には主に「メンバ変数 = value」というように記述します。valueは利用者側のクラスで代入された値が格納される予約語と呼ばれるものです。
getの中には「return メンバ変数」のように戻り値を指定します。
その後利用者側のクラスでインスタンスを生成し、値の取得時は「インスタンス名.プロパティ名」で 「get{}」を呼び出して「インスタンス名.プロパティ名 = 値」で「set{}」を呼び出します。
このように実装する事で、プロパティを記述するクラスではメソッドとして扱う事ができ、かつ利用者側のクラスではメンバ変数のように扱う事ができるようになります。
【C# 6.0以降】get-onlyについて
C# 6.0以降では「get-onry」という記述のやり方ができあます。
これは「set{}」を記述しない書き方になります。
「get-only」にするとコンストラクタでのみ値を代入できるようになってそれ以降は変更が不可能となります。
まとめ
今回の記事では、「C#のプロパティ」について説明しました。
・プロパティとは
・プロパティを使うメリット
・プロパティの書き方・使い方
上記だけは今回覚えていってください。
プロパティはプログラミングする規模が大きくなるにつれ、目にする機会も増えてくるかと思います。
ここで使い方を覚えて、使いこなしていきましょう!
他にも、C#についての記事があるのでよかったら見ていってください。
【C#】コンストラクタとデストラクタ
【C#】例外処理でアプリケーションを安全に(try-catch-finally)
[C#] 可変長引数をつかってみる