抽象クラスは、基底クラスとなることを目的としたクラスです。
このクラスには抽象メソッドを宣言することができますが、実装を持つことができないため、メソッドの宣言は単にセミコロンで終わり、
シグネチャに続く中かっこ ({ }) はありません。
抽象クラス・メソッドを宣言するには abstract を指定します。
- abstract class クラス名
{
abstract 戻り値型 メソッド名();
}
それでは、なぜ基底クラスでなければならないのかというと、このクラスは static に指定したり、インスタンスを生成することができないため、
単独ではなんの意味もありません。
このクラスは、派生クラスからオーバーライドすることにより始めて意味のあるクラスとなります。
これは、インターフェイスを実装するのように、派生クラスで実装して欲しいメソッドがある場合に使用します。
最後に、なぜオーバーライドすることができるのか疑問に思うかもしれませんが、実は指定した abstract とは virtual と同じで仮想メソッドにすることができます。
そのため、abstract と virtual は併用することができません。
抽象クラスについて、より詳しく知りたい方は ここ を参考にするとよいです。
//サンプル38
using System;
namespace ConsoleApplication
{
abstract class BaseClass // 抽象クラス
{
protected int _a;
protected int _b;
// 抽象メソッド。{}の中は定義できません。派生クラスで再定義します。
public abstract void AbstractMethod( int a , int b );
// 抽象プロパティ。こちらは、{}の中に set または get を指定することができます。
public abstract int Sum { get; }
}
class MyClass : BaseClass
{
public override void AbstractMethod( int a , int b )
{
base._a = a;
base._b = b;
}
public override int Sum
{
get
{
return _a + _b;
}
}
static void Main()
{
MyClass o = new MyClass();
o.AbstractMethod( 5 , 8 );
Console.WriteLine(o.Sum);
}
}
}