【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
はクラスやメソッドの抽象化に使う。- 抽象クラスはインスタンス化できない。
- 抽象メソッドは派生クラスで必ず実装する。
- インターフェースと使い分けることが重要。