ジェネリッククラス
Midoliy|F#プログラミング

ジェネリッククラスの概要
サンプルでみるジェネリッククラス

ジェネリッククラスの概要


 ジェネリック型については、すでに簡単に紹介しておりますので、一度 こちら を一読ください。

 ジェネリック化は何も関数だけにしか適用できないわけではありません。クラスや構造体も例外ではなく、ジェネリック化することができます。これにより、より柔軟なコード作成や、パラメータの型だけが違う類似クラスを宣言する必要がなくなるなど、様々なところで恩恵を受けることができます。
 ジェネリッククラスを宣言するためには、以下のように 山かっこ(<>) と シングルクォートから始まる型識別子 を利用して宣言します。
type class-name<'a> (x: 'a) = class end

 この「シングルクォートから始まる型識別子」のことを型パラメータとも呼ぶので覚えておきましょう。型パラメータは必ずシングルクォートから始まらなければなりません。
 複数の型パラメータ指定する場合はカンマ(,)で区切ることで対応することができます。以下は3つの型パラメータを指定する場合のサンプルです。
type SampleClass<'a, 'b, 'c> (x0:'a, x1:'b, x2:'c) = class end


サンプルでみるジェネリッククラス


 以下は簡単なジェネリッククラスのサンプルになります。

// =========================================================
// ジェネリッククラスのサンプル
// =========================================================
// ジェネリック型を持つクラスのサンプル
// クラス名の後ろに, シングルクォート(= ')とそれに続くID, 山括弧(<>)を利用して指定します.
type SampleClass<'a> (x0: 'a) = class
// ジェネリック型のバッキングフィールド
let x = x0
// ジェネリック型のget-onlyプロパティ
member this.X = x
end
// int型でSampleClassをインスタンス化
let sample1 = SampleClass (10)
// double型でSampleClassをインスタンス化
let sample2 = SampleClass (21.5)
// string型でSampleClassをインスタンス化
let sample3 = SampleClass ("test")