抽象

標有關鍵字 abstract 的類無法例項化。

如果一個類包含抽象成員,或者它繼承了它未實現的抽象成員,則必須將該類標記為抽象。即使沒有涉及抽象成員,也可以將類標記為抽象。

當實現的某些部分需要由另一個元件指定時,抽象類通常用作基類。

abstract class Animal 
{
    string Name { get; set; }
    public abstract void MakeSound();
}

public class Cat : Animal 
{
    public override void MakeSound()
    {
        Console.WriteLine("Meov meov");
    }
}

public class Dog : Animal 
{   
    public override void MakeSound()
    {
        Console.WriteLine("Bark bark");
    }
}

Animal cat = new Cat();       // Allowed due to Cat deriving from Animal
cat.MakeSound();              // will print out "Meov meov"    

Animal dog = new Dog();       // Allowed due to Dog deriving from Animal
dog.MakeSound();              // will print out "Bark bark"

Animal animal = new Animal(); // Not allowed due to being an abstract class

使用關鍵字 abstract 標記的方法,屬性或事件表示該成員的實現應該在子類中提供。如上所述,抽象成員只能出現在抽象類中。

abstract class Animal 
{
   public abstract string Name { get; set; }
}

public class Cat : Animal 
{
    public override string Name { get; set; }
}

public class Dog : Animal 
{
    public override string Name { get; set; }
}