このクラスはインスタンス化することはできませんが、サブクラス定義されたクラスのメンバ関数をオーバーライドする必要があります。
使用する場合は、抽象と仮想メンバ関数の違いに注意を払います:
1.仮想関数または上書きをカバーしてもしなくてもよい、機能は、実際に関数を定義しています。
abstract class FourLeggedAnimal
{
public virtual string Describe()
{
return "Not much is known about this four legged animal!";
}
}
class Dog : FourLeggedAnimal
{
}
若しくは
abstract class FourLeggedAnimal
{
public virtual string Describe()
{
return "This animal has four legs.";
}
}
class Dog : FourLeggedAnimal
{
public override string Describe()
{
string result = base.Describe();
result += " In fact, it's a dog!";
return result;
}
}
2.抽象関数は、単にインスタンス化された機能インタフェース、本当の機能は、サブクラスで再実装しなければならない規定します。
abstract class FourLeggedAnimal
{
public abstract string Describe();
}
class Dog : FourLeggedAnimal
{
public override string Describe()
{
return "I'm a dog!";
}
}
class Cat : FourLeggedAnimal
{
public override string Describe()
{
return "I'm a cat!";
}
}
ます。https://my.oschina.net/u/63375/blog/3057269で再現