抽象クラス
C#同様に、F#にも親クラスで宣言のみされ実装は派生クラスで行われる抽象メンバーが存在します。抽象メンバーは、abstractキーワードを使用して宣言します。抽象メソッドに関しては、上記の継承の例にもありましたが、親クラスにて抽象メソッドを宣言する際に、defaultキーワードを使用してデフォルトの実装を定義することも可能です。
[<AbstractClass>]属性を持ち、抽象メンバーを持つクラスを抽象クラスといい、このクラスをインスタンス化することはできません。
[<AbstractClass>]
type [ アクセス修飾子] 抽象クラス名 =
[ inherit 親クラス(またはインターフェイス名)]
[ 抽象メンバー宣言 ]
//抽象メンバー宣言
abstract member メンバー名 : 型シグネチャ
型シグネチャとは、メソッド用のパラメータの型のことです。例えば、int型の引数を受け取り、unit型のパラメータを返す(つまり戻り値がない)場合はint -> unitというように記述します。
以下はC#とF#の抽象メソッドとそのデフォルト実装の使用例です。ともにメソッドが親クラスで宣言され、子クラスで実装されています。親クラスは抽象クラスとして宣言されているため、インスタンス化できません。
abstract class testBaseClass //抽象メソッドを持つ抽象クラス
{
public abstract void testMethodPrint();
}
class testChildClass : testBaseClass //testBaseClassを継承
{
public override void testMethodPrint()
{
//抽象メソッドtestMethodPrintの実装
Console.WriteLine("子クラスにて実装されたtestMethodPrint");
}
}
class Test
{
static void Main()
{
// 下記のような抽象クラスtestBaseClassのインスタンス化は不可
//testBaseClass testObjChild0 = new testBaseClass();
testBaseClass testObjChild = new testChildClass();
testObjChild.testMethodPrint();
}
}
▼
子クラスにて実装されたtestMethodPrint
F#で抽象メソッドを宣言し、デフォルトの実装を定義する構文は次のようになります。
//抽象メソッド+デフォルト実装
abstract member [inline] セルフ識別子.メソッド名 : 型シグネチャ
default member [inline] セルフ識別子.メソッド名 パラメータ[ : 戻り値の型 ] =
メソッド本体
以下のリスト8では、抽象クラスtestBaseAbsClassは抽象クラスなので、インスタンス化できず、それを継承するtestChildClassのインスタンスでオブジェクトを実装します。
open System
[<AbstractClass>] //抽象クラスなのでインスタンス化できない
type testBaseAbsClass () =
abstract member testMethod : unit -> unit
type testChildClass () =
inherit testBaseAbsClass () //testBaseAbsClassを継承
override this.testMethod () =
Console.WriteLine("testChildClassのメソッド")
//[<AbstractClass>]で宣言された抽象クラスはインスタンス化できず、次の行はエラーになる
// let testObj = new testBaseAbsClass()
let testObj = new testChildClass()
testObj.testMethod();;
▼
testChildClassのメソッド
- 修正履歴
-
- 2010/01/25 22:02 読者コメント指摘により、一部表現を訂正。
この記事は参考になりましたか?
- C#プログラマのためのF#入門連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 星山 仁美(ホシヤマ ヒトミ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
