C#プログラミングを次のレベルへ進める上で欠かせないのが「クラス」の理解です。クラスは、オブジェクト指向という考え方の中心にある、非常に強力な機能です。
一見すると難しそうに感じるかもしれませんが、この記事では「クラスとは何か?」から、その使い方までを、具体的な例を交えながら丁寧に解説します。
クラスとは?モノの「設計図」を理解しよう
クラスとは、簡単に言うと**モノの「設計図」**です。
例えば、自動車の設計図を考えてみましょう。設計図には、自動車が持つべき「データ」(色、最高速度、ドアの数など)と、自動車ができる「動作」(走る、止まる、曲がるなど)が定義されています。
この**設計図にあたるのが「クラス」です。そして、その設計図を基に実際に作られた個々の自動車が「インスタンス(オブジェクト)」**です。
C#では、このクラスという設計図を使って、データとそれに関連する処理をひとまとめに管理します。
クラスの基本的な構文
クラスは、その「設計図」にどんなデータと動作が含まれるかを定義します。
- クラスに所属する変数をフィールドと呼びます。(データ)
- クラスに所属する処理をメソッドと呼びます。(動作)
サンプルコード:キャラクターの設計図 (Character
クラス)
class Character
{
// フィールド (キャラクターが持つデータ)
public int id;
public string name;
public int hp;
// メソッド (キャラクターができる動作)
public void ShowStatus()
{
Console.WriteLine("ID: " + id);
Console.WriteLine("名前: " + name);
Console.WriteLine("HP: " + hp);
}
}
クラスを使ってみよう(インスタンス化と利用)
設計図(クラス)を作っただけでは、それはまだただの定義です。実際に使うためには、設計図から実体(インスタンス)を作り出す必要があります。
1. インスタンスの作成
クラスからインスタンスを作成するには new
キーワードを使います。これをインスタンス化と呼びます。
// Characterクラスの設計図から、player1という名前のインスタンスを生成
Character player1 = new Character();
2. フィールドとメソッドの利用
作成したインスタンスのフィールドに値を入れたり、メソッドを呼び出したりするには .
(ドット) を使います。
サンプルコード全体 (Program.cs
)
// Characterクラスの設計図から、player1という名前のインスタンスを生成
Character player1 = new Character();
// player1のフィールドに値を代入 (ドットでアクセス)
player1.id = 1;
player1.name = "勇者";
player1.hp = 100;
// player1のメソッドを呼び出す (ドットでアクセス)
player1.ShowStatus();
// --- 実行結果 ---
// ID: 1
// 名前: 勇者
// HP: 100
アクセス修飾子 public
先ほどのクラス定義で、フィールドやメソッドの先頭に public
というキーワードが付いていました。これはアクセス修飾子と呼ばれ、そのメンバー(フィールドやメソッド)に「どこからアクセスできるか」という公開範囲を設定します。
- public: どこからでもアクセス可能(公開)
- private: そのクラスの内部からのみアクセス可能(非公開)
- protected: クラス内部と、そのクラスを継承したクラスからアクセス可能
今回はクラスの外(Program.cs
)からアクセスするため、public
を指定しています。
なぜインスタンスを複数作成するのか?
クラス(設計図)が一つあれば、そこからデータが異なるインスタンスをいくつでも作成できます。これがクラスの非常に強力な点です。
// 1体目のキャラクター(プレイヤー)を作成
Character player1 = new Character();
player1.id = 1;
player1.name = "勇者";
player1.hp = 100;
player1.ShowStatus();
Console.WriteLine("---"); // 区切り線
// 2体目のキャラクター(敵)を作成
Character enemy1 = new Character();
enemy1.id = 101;
enemy1.name = "スライム";
enemy1.hp = 30;
enemy1.ShowStatus();
実行結果
ID: 1
名前: 勇者
HP: 100
---
ID: 101
名前: スライム
HP: 30
このように、同じ Character
設計図から、データが全く異なる「勇者」と「スライム」という2つの独立したインスタンスを作成できました。
メソッドを使いこなす
メソッドは、クラスの「動作」を定義する重要な要素です。ここでは、メソッドの基本的な使い方をさらに掘り下げます。
戻り値 (Return Value)
メソッドは、処理結果として値を返すことができます。この返す値を戻り値と呼びます。
- 値を返さないメソッドは
void
を指定します。 - 値を返す場合は、返す値の型(
int
,string
など)を指定し、return
キーワードで値を返します。
サンプルコード
public class Character
{
public int hp;
// HPが0より大きいかを判定し、bool型(true/false)の結果を返すメソッド
public bool IsAlive()
{
return hp > 0;
}
// 値を返さないメソッド
public void ShowStatus()
{
Console.WriteLine("HP: " + hp);
// voidメソッドでは return; は省略可能
}
}
// --- 使い方 ---
Character player1 = new Character();
player1.hp = 50;
bool isPlayerAlive = player1.IsAlive(); // メソッドの戻り値を変数に代入
Console.WriteLine("プレイヤーは生きているか?: " + isPlayerAlive); // True
引数 (Argument)
メソッドを呼び出す際に、外部から値を渡すことができます。この渡す値を**引数(ひきすう)**と呼びます。
サンプルコード
public class Character
{
public string name;
public int hp;
// int型の引数 damageAmount を受け取り、HPを減らすメソッド
public void TakeDamage(int damageAmount)
{
hp = hp - damageAmount;
Console.WriteLine(name + "は " + damageAmount + " のダメージを受けた!");
}
}
// --- 使い方 ---
Character player1 = new Character();
player1.name = "勇者";
player1.hp = 100;
player1.TakeDamage(30); // 30という値を引数として渡す
Console.WriteLine("残りHP: " + player1.hp);
// --- 実行結果 ---
// 勇者は 30 のダメージを受けた!
// 残りHP: 70
まとめ
今回は、C#のクラスの基本について解説しました。
- クラスは、データ(フィールド)と動作(メソッド)をまとめた設計図。
- インスタンスは、
new
キーワードでクラスから作成された実体。 - インスタンスのメンバーには
.
(ドット) でアクセスする。 public
などのアクセス修飾子で、外部からのアクセス可否を制御する。- メソッドは、戻り値で結果を返したり、引数で値を受け取ったりできる。
クラスはオブジェクト指向プログラミングの根幹をなす概念です。まずは簡単なクラスを自分で作ってみるところから、ぜひ始めてみてください。