概要:
C# の抽象クラスは、インスタンス化できず、継承のみが可能な特殊なタイプのクラスです。抽象クラスは、一部のメソッドとプロパティのシグネチャを定義する共有基本クラスを提供するために使用されますが、具体的な実装はありません。これらのメソッドとプロパティは派生クラスで実装できます。
抽象クラスを使用する主な目的は、コードの再利用とモジュール化を実現することです。抽象クラスはいくつかの共通のメソッドとプロパティを定義できますが、派生クラスは特定の実装を担当します。派生クラスは、抽象クラス内のすべての抽象メンバーを実装する必要があります。それ以外の場合、派生クラスも抽象クラスとして宣言する必要があります。
詳細:
1. 抽象メソッドは抽象クラスで定義する必要があります。
2. 抽象メソッドにはメソッドの定義のみがあり、特定の実装はなく、メソッド本体は省略されます。
3. 非抽象メソッドは抽象クラスでも定義できます
4. 抽象クラスは new を使用してインスタンス化できません 抽象クラスは基底クラスとして使用できます 実装されたサブクラスは、抽象クラス内の抽象メソッドをオーバーライドする必要があります。
5. 多くの場合、抽象親クラスの一部のメソッドは特定の実装を定義できず、これらのメソッドを実装するにはサブクラスで定義する必要があります。
abstract class Animal
{
public abstract void Sound(); // 抽象方法
public void Eat() // 普通方法
{
Console.WriteLine("Animal is eating");
}
}
class Dog : Animal
{
public override void Sound()
{
Console.WriteLine("Dog is barking");
}
}
class Cat : Animal
{
public override void Sound()
{
Console.WriteLine("Cat is meowing");
}
}
class Program
{
static void Main(string[] args)
{
Animal dog = new Dog();
Animal cat = new Cat();
dog.Sound(); // 输出 "Dog is barking"
cat.Sound(); // 输出 "Cat is meowing"
dog.Eat(); // 输出 "Animal is eating"
cat.Eat(); // 输出 "Animal is eating"
}
}
上記の例では、Animal クラスは抽象クラスであり、抽象メソッド Sound と共通メソッド Eat を定義します。Dog クラスと Cat クラスは、Animal クラスを継承し、Sound メソッドを実装します。Main メソッドでは、Dog と Cat のインスタンスを作成し、Sound メソッドと Eat メソッドを呼び出します。
抽象クラスの利点の 1 つは、いくつかの一般的な動作とプロパティを定義するための共有基本クラスを提供できることです。このように、抽象クラスを使用して、特定の派生クラスとは関係のない一部の操作を統一的に処理できるため、コードの再利用とモジュール化が実現します。