アクセス修飾子
F#には以下の3つのアクセス修飾子があります。クラスなどのtypeで宣言されるオブジェクト、メソッド、関数、プロパティ、valで宣言されるフィールドなどに使用できます。アクセス修飾子が指定されていない場合には、type内のletバインドはデフォルトprivateですが、それ以外はpublicになります。
| 修飾子 | 概要 |
| public | どこからでもアクセス可能 |
| internal | 同じアセンブリ内からのみアクセス可能 |
| private | 同一モジュール内もしくは、同一のtypeキーワードで宣言されている内部の要素からのみアクセス可能 |
C#にあるprotectedはF#にありません。しかし、protectedをサポートする言語で宣言されたクラスやその他の型を使えばprotectedの要素にアクセスすることができます。オーバーライドされたprotectedなメソッドもクラスとその派生クラスからのみアクセスできます。
メンバー
メンバーとはクラスを構成する、memberキーワードで宣言される要素(メソッド、プロパティ、イベント)とプライマリ以外のコンストラクタのことです。
メソッド
まず、メンバーの中で最も重要な機能、メソッドについて解説したいと思います。
メソッドは次のようにmemberキーワードを用いて作成します。
(1)メソッドの定義
=(イコール)の後ろに続くメソッド本体が長い場合は改行し、インデントをつけます。
[属性]
member [アクセス修飾子] [inline] セルフ識別子.メソッド名 パラメータ [: 戻り値の型]=
メソッド本体
クラスを定義する際に、「as セルフ識別子」で指定されたクラス内で有効なセルフ識別子とは別に、メソッド名の前にセルフ識別子を指定することで、メソッド内のみ有効なセルフ識別子を指定できます。
先ほど作成したクラスにシンプルなメソッドを追加してみます。メソッドの定義はいかなる場合にも、letとdo式の後になります。
//クラスの作成
type testClass1(a1 : int, b1 : int) as kore=
let a = a1 + b1
let mutable b = a1 * b1
let mutable c = "hello"
[<DefaultValue>] val mutable c : int
[<DefaultValue>] val mutable d : string
do printf "%d, %d" a b;
member this.testMethod3() =
printf "Data: %d %d %s" a b c ;;
//インスタンスの作成とメソッドの呼び出し
let testObj1 = new testClass1(10, 20) ;;
testObj1.testMethod3();;
▼
type testClass1 =
class
new : a1:int * b1:int -> testClass1
val mutable c: int
val mutable d: string
//testMethodはパラメータを受け取らず(つまりパラメータはUnit型)戻り値がunitである
member testMethod3 : unit -> unit
end
>
//プライマリコンストラクタによる処理
30, 200
val testObj1 : testClass1
//メソッドによる処理
> Data: 30 200 hello
val it : unit = ()
どんな型のパラメータが使用可能か制限するために、メンバー制約という制約が使用できます。メンバー制約を有効にするためには、inline修飾子をつける必要がありますが、メンバー制約についての詳細は次回移行の連載で解説します。
メソッドに適用できる属性としては、OverloadIDなどがありますが、これについても次回以降の連載にて属性を取り扱う際に解説したいと思います。
(2)スタティックメソッド
インスタンスを作成せずに直接クラスから呼び出すことができるメソッドをスタティックメソッドと言います(対して呼び出しにインスタンス作成が必要なメソッドをインスタンスメソッドと言います)。
[属性]
static member [アクセス修飾子] [inline] メソッド名 パラメータ [: 戻り値の型]=
メソッド本体
以下の例のように、インスタンスではなく、クラス経由でメソッドが呼べます。
type testClass =
class
static member testMethod a b = a + b
end;;
let a = testClass.testMethod 1 2;;
▼
type testClass =
class
static member testMethod : a:int -> b:int -> int
end
>//クラスから直接メソッドが呼び出せた
val a : int = 3
この記事は参考になりましたか?
- 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
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
