主な違い:抽象メソッドは、宣言されているが実装がないメソッドです。 仮想メソッドは、型に基づく多態性の実装に使用されます。 派生クラスは、キーワード 'override'を使用して基本クラスの仮想メソッドを再実装する柔軟性を持っています。
例えば -
パブリック抽象クラスexampleAbstractClass
{
public abstract void exampleabstractMethod();
public virtual void nonAbstractMethod()
{
Console.WriteLine( "実装はメソッドに定義されています");
}
クラスnormalNonAbstractClass:exampleAbstractClass
{
パブリックオーバーライドvoid exampleabstractMethod()
{
Console.WriteLine( "クラスexampleAbstractClassのexampleabstractMethodのオーバーライド");
}
}
クラスBase
{
公開仮想無効テスト()
{
Console.WriteLine( "Base.Test");
}
}
派生クラス:Base
{
パブリックオーバーライドvoid Test()
{
Console.WriteLine( "Derived.Test");
}
}
仮想メソッドは、型に基づく多態性の実装に使用されます。 派生クラスには、overrideキーワードを使用して基本クラスの仮想メソッドを再実装する柔軟性があります。 virtualとabstractの両方を、static、virtual、またはoverrideの修飾子と一緒に使用することはできません。
仮想方式と抽象方式の比較
仮想メソッド | 抽象メソッド | |
定義 | 仮想メソッドは、型に基づく多態性の実装に使用されます。 | 抽象メソッドは、宣言されているが実装がないメソッドです。 |
実装 | はい、実装できます | いいえ、実装できません |
上書きする必要があります | 強制ではない | 強制 |
他の種類の方法と区別するためのキーワード | バーチャル | 抽象 |
クラス | 仮想メソッドを含むクラスをインスタンス化できます。 | 抽象メソッドを含むクラスはインスタンス化できません。 継承できるだけです。 |
範囲 | 仮想メソッドの範囲はメンバーだけに限られます。 | メンバーとクラスに対する抽象メソッドのスコープ。 |
実行するメソッド(オブジェクトベースクラス) | 具象クラスで実装が提供されていない場合にのみ、親実装が呼び出されます。 | 具体的な実装 |
実行するメソッド(オブジェクト具象クラス型) | 具体的な実装 | 具体的な実装 |