【C#】abstractについて
abstractとは
C#のabstractは、オブジェクト指向プログラミングにおいて、クラスやメソッドの抽象化を行うために使われるキーワードです。
抽象クラス(abstract class)を作ることで、共通の機能を持たせつつ、具体的な実装は派生クラスに任せることができます。
抽象クラスの基本
抽象クラスはabstract修飾子を付けて宣言します。通常のクラスとは異なり、インスタンス化できません。
abstract class Animal
{
public abstract void MakeSound();
}
上記のAnimalクラスは抽象クラスなので、そのままではインスタンスを作成できません。
抽象メソッド
抽象メソッドとは、具体的な実装を持たないメソッドのことです。抽象クラス内で定義され、派生クラスでオーバーライドされる必要があります。
abstract class Animal
{
public abstract void MakeSound();
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("ワンワン!");
}
}
このように、DogクラスはMakeSoundメソッドを実装することで、Animalクラスの契約を満たします。
abstractとinterfaceの違い
- abstract class:継承関係が1つのみ。
- interface:複数の実装を持つことができる。
例えば、次のように使い分けます。
interface IAnimal
{
void MakeSound();
}
class Dog : IAnimal
{
public void MakeSound()
{
Console.WriteLine("ワンワン!");
}
}
インターフェースは複数の異なる型に適用できますが、抽象クラスは継承による関係を強調します。
実際の使用例
実際の開発では、抽象クラスを使って共通の機能を定義し、派生クラスでカスタマイズすることが多いです。
abstract class Vehicle
{
public abstract void Move();
}
class Car : Vehicle
{
public override void Move()
{
Console.WriteLine("車が走る");
}
}
class Bicycle : Vehicle
{
public override void Move()
{
Console.WriteLine("自転車が走る");
}
}
このように、Vehicleクラスを基に、異なる乗り物の動作を定義できます。
まとめ
abstractはクラスやメソッドの抽象化に使う。- 抽象クラスはインスタンス化できない。
- 抽象メソッドは派生クラスで必ず実装する。
- インターフェースと使い分けることが重要。