『Unity C#基礎』 第八回: クラスとオブジェクト指向入門
この記事では、C#におけるクラスの定義とインスタンス化、そしてオブジェクト指向の基本概念である継承とポリモーフィズムについて学びます。
クラスの定義とインスタンス化
クラスは、オブジェクトの設計図として機能します。クラスには、属性(データ)やメソッド(振る舞い)を定義できます。C#では、クラスを使って新しい型を定義し、その型を基にオブジェクトを生成します。
クラスの基本構造
以下は、C#でのクラスの基本的な構造です。
public class ClassName
{
// プロパティ(属性)
public int Property1 { get; set; }
public string Property2 { get; set; }
// コンストラクタ
public ClassName(int p1, string p2)
{
Property1 = p1;
Property2 = p2;
}
// メソッド
public void MethodName()
{
// 処理
}
}
クラスのインスタンス化
クラスからオブジェクトを生成することをインスタンス化と言います。以下のコードでは、Playerクラスを定義し、それをインスタンス化しています。
public class Player
{
public string Name { get; set; }
public int Health { get; set; }
public Player(string name, int health)
{
Name = name;
Health = health;
}
public void TakeDamage(int damage)
{
Health -= damage;
Debug.Log(Name + "のHP: " + Health);
}
}
// インスタンス化
Player player1 = new Player("リリィ", 100);
player1.TakeDamage(20); // リリィのHP: 80
この例では、Playerクラスのオブジェクトplayer1を生成し、TakeDamageメソッドを使用してHPを減少させています。
オブジェクト指向の基本概念
オブジェクト指向プログラミング(OOP)は、データとその処理を一緒にまとめる方法です。以下では、OOPの基本概念である継承とポリモーフィズムについて説明します。
継承
継承は、既存のクラスから新しいクラスを作成する仕組みです。新しいクラスは、既存のクラスの特性を引き継ぎつつ、独自の機能を追加できます。
以下の例では、EnemyクラスがPlayerクラスを継承しています。
public class Enemy : Player
{
public int AttackPower { get; set; }
public Enemy(string name, int health, int attackPower)
: base(name, health)
{
AttackPower = attackPower;
}
public void Attack(Player target)
{
target.TakeDamage(AttackPower);
}
}
Enemyクラスは、Playerのプロパティやメソッドを持ちながら、追加でAttackPowerプロパティとAttackメソッドを持っています。
ポリモーフィズム
ポリモーフィズムは、同じメソッド名が異なるクラスで異なる動作をする能力です。これにより、柔軟で再利用性の高いコードが実現します。
以下の例では、PlayerクラスとEnemyクラスが同じメソッド名を持っていますが、動作が異なります。
public class Player
{
public virtual void Attack()
{
Debug.Log("プレイヤーが攻撃した!");
}
}
public class Enemy : Player
{
public override void Attack()
{
Debug.Log("敵が攻撃した!");
}
}
この例では、PlayerクラスのAttackメソッドがEnemyクラスでオーバーライドされています。これにより、オブジェクトの型に応じて異なる動作を実行できます。
まとめ
クラスは、オブジェクトの設計図としてデータとその処理を定義します。
インスタンス化により、クラスからオブジェクトを生成します。
継承を使用することで、コードの再利用が可能になります。
ポリモーフィズムにより、同じメソッド名で異なるクラスで異なる動作を実現できます。
次回は、クラスの詳細や、データのカプセル化について深掘りしていきます。質問があれば、コメントでお知らせください!
この記事が気に入ったらサポートをしてみませんか?