SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

C#プログラマのためのF#入門

F#の継承とインターフェイス

C#プログラマのためのF#入門(4)


  • X ポスト
  • このエントリーをはてなブックマークに追加

インターフェイス

 F#でも、C#同様、クラスは複数のインターフェイスを実装できます。

 インターフェイスはクラスと似ていますが、メンバーはすべて抽象メンバーとなります。defaultキーワードを使用してメソッドのデフォルトの実装を定義することは可能です。

【構文】インターフェイスの宣言
 [ 属性 ]
typeインターフェイス名 =
   [ interface ]
     abstract メンバー名1 : [ パラメータの型1 -> ] 戻り値の型1
     abstract メンバー名2 : [ パラメータの型2 -> ] 戻り値の型2
     ...
   [ end ]

//クラス内での実装 
interfaceインターフェイス名 with
   memberセルフ識別子.メンバー名1パラメータ = メソッド本体1
   member セルフ識別子.メンバー名2パラメータ = メソッド本体2

インターフェイスの宣言と実装

 実装はクラス型もしくは、オブジェクト式の2通りありますが、今回はクラス型の実装方法のみ紹介します。オブジェクト式での実装は、次回以降の連載で予定しているオブジェクト式の解説の際に紹介します。.NETのコーディングスタイルどおり、インターフェイス名の頭文字は”I”になります。

 以下はインターフェイスの宣言と実装の例です。

[リスト9]メソッド呼び出し時にクラスインスタンスをアップキャスト
//インターフェイス宣言
type ITestInterface =
   abstract member testMethod : unit -> unit
//インターフェイス実装
type testClass(a : int, b : int) =
   interface ITestInterface with
      member this.testMethod() = printfn "%d %d" a b

//メソッド呼び出し
let x1 = new testClass(3, 4)
//インターフェイス型へインスタンスをアップキャストする
(x1 :> ITestInterface).testMethod();;

 ▼

3 4

 インターフェイスのメソッドはインターフェイス経由でのみ呼び出すことが可能です。そのため、オブジェクトを”:>”演算子や、”upcast”演算子を用いてインターフェイスの型へアップキャストする必要があります。アップキャスト(または、アップキャスティング)とは、派生(子)オブジェクトからベースオブジェクト(親)へ型変換することです。

【構文】アップキャスト
オブジェクト名 :> ベース(親)オブジェクト型名

 上記リスト9の例ですが、もう1つ別の方法として、クラス内でアップキャストしてメソッドを宣言する方法があります。

[リスト10]クラス内でアップキャストしてメソッドを宣言する
//インターフェイス宣言
type ITestInterface =
   abstract member testMethod : unit -> unit
//インターフェイス実装(アップキャストしてメソッドを宣言)
type testClass2(a : int, b : int) =
    member this.testMethod() = (this :> ITestInterface).testMethod()
    interface ITestInterface with
        member this.testMethod() = printfn "%d %d" a b
//メソッド呼び出し
let testObj2 = new testClass2(10, 20)
testObj2.testMethod();;

 ▼

10 20

 上記のリスト10では、メソッド呼び出し時にインスタンスをアップキャストする代わりに、実装時にメソッド自体をアップキャストしています。

 アップキャストの逆、ベースオブジェクトから派生オブジェクトへの変換をダウンキャスト(ダウンキャスティング)と言います。ダウンキャストに関しては、一般的な概念同様ですがF#でも、オブジェクトが直接派生してない型へのダウンキャストは、コンパイル時にエラーが返されます。

次のページ
モジュール

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 星山 仁美(ホシヤマ ヒトミ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4714 2010/01/25 22:09

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング