抽象

标有关键字 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; }
}