プロパティとは
プロパティとは、変数へのアクセスを制御し、値を適切に管理するための機能です。
わかりやすく言えば、変数に意図しない値が入ってしまうのを防ぐ役割などを持ちます。
この変数にはマイナスの値を入れたくない、この変数には上限を設けたいといった場合に便利ですが、それ以外にも、値を取得・設定する際に特定の処理を行いたい場合にも役立ちます。この記事では、プロパティを使用するメリットやその重要性について説明していきます。
どんなときに必要なの?
では、具体的にどのような場面でプロパティが必要になるのかを見ていきましょう。
まずは、プロパティを使わずにクラスを作成してみます。
class Player
{
//体力を格納するパブリック変数
public int life;
}
上記のコードは、Playerというクラスを定義し、その中にlifeという体力を格納する変数を持っています。このlife変数は整数型なので、100や200といった値を設定できますが、-100のような値を設定することも可能です。
しかし、体力がマイナスになるのは不自然です。また、意図しない値が設定されることでバグやエラーが発生する可能性もあります。こうした問題を防ぐためには、life変数へのアクセスを制御する仕組みが必要です。
そこで、プロパティを使用することで、この問題を簡単に解決できます。
プロパティを書いてみる
以下は、プロパティを使用して意図しない値が設定されるのを防ぐ例です。
class Player
{
// 体力を格納するプライベート変数
private int life;
// プロパティ
public int Life
{
get
{
// lifeの値をそのまま返す
return life;
}
set
{
// 代入された値がマイナスの場合
if (value < 0)
{
// 0を代入する
life = 0;
}
else
{
// 値が正の場合はそのまま代入
life = value;
}
}
}
}
プロパティの役割
このコードでは、life変数をプライベートに設定し、直接アクセスできないようにしています。外部から値を取得・設定する際には、プロパティLifeを使用します。
●getアクセサー
getは、プロパティを介して値を取得する際に使用されます。
今回は単にlife変数の値をそのまま返しています。
get
{
// lifeの値をそのまま返す
return life;
}
●setアクセサー
setは、プロパティを介して値を設定する際に使用されます。
今回の例を見てみると、マイナス以下の値が入らないような制限をかけています。
valueというのは、プロパティに設定される値を表すキーワードです。
set
{
if (value < 0)
{
life = 0;
}
else
{
life = value;
}
}
実際に使ってみる
using System;
class Program
{
static void Main(string[] args)
{
//Playerクラスのインスタンスを作成
Player player = new Player();
//体力を設定
player.Life = 100;
Console.WriteLine("現在の体力: " + player.Life);
//マイナスの値を設定
player.Life = -50;
Console.WriteLine("マイナス値を設定した場合の体力: " + player.Life);
//体力を再設定
player.Life = 50;
Console.WriteLine("再設定後の体力: " + player.Life);
}
}
●出力結果
現在の体力: 100
マイナス値を設定した場合の体力: 0
再設定後の体力: 50
ゲームの仕様に応じた独自のルールをsetで簡単に追加できます(例: 最大値の制限など)
また、直接lifeを触らせないことで、意図しない値の代入(例: マイナス値)を防げます。
自動実装プロパティとは
プロパティについて調べていると、自動実装プロパティという言葉をよく目にします。自動実装プロパティは、C#でプロパティを簡単に定義できる機能です。通常のプロパティでは、値を格納するためのフィールドを定義し、getやsetアクセサーを記述する必要があります。しかし、自動実装プロパティではこれらを簡略化できます。
まずは、通常のプロパティと自動実装プロパティを比較しながら見てみましょう。
●通常のプロパティ
この場合、lifeフィールドを手動で定義し、getやsetアクセサーにロジックを記述しています。
class Player
{
private int life;
public int Life
{
//通常のプロパティ
get { return life; }
set { life = value; }
}
}
●自動実装プロパティ
自動実装プロパティを使用すると、フィールドの定義やget・setアクセサーの明示的な記述を省略できます。
class Player
{
// 自動実装プロパティ
public int Life { get; set; }
}
自動実装プロパティの特徴
●シンプルに書くことができる
自動実装プロパティの特徴としてシンプルな構文で定義することができます。
通常のプロパティを扱う際は、手動でフィールド変数(life)を宣言していました。しかし、自動実装プロパティでは自動で定義されるため、余分な手間を省くことができます。
●できないこと
自動実装プロパティはそのシンプルさゆえに「値の設定や取得時に特別なルールや処理を追加する」ことができません。通常のプロパティでは「マイナスの値を設定できあにようにする」のような条件を付けることができましたが、自動実装プロパティではできません。
さいごに
このように、プロパティは変数を安全かつ柔軟に管理するための強力なツールです。プロパティを活用することで、よりデータの整合性を保ったコードを書くことが可能になります。