【C# ジェネリック】制約条件 part6-2

【C# ジェネリック】制約条件 part6-2

今回はジェネリックの制約条件について紹介します!

四則演算ができない

ジェネリックでは,四則演算ができません.

何故なら,型が明確ではないからです.

例えば,string型とstring型の掛け算,bool型とint型の引き算はできません.

制約条件

ジェネリックには,制約条件というものがあります.

制約条件は,どういう性質を持った型なのかを表す為に使います.

また,制約条件を指定する事によって,外部のメソッドを使用できるようにする事ができます.(CompareToメソッドなど)

制約条件は,whereキーワードを使って次のように記述します.

制約には,

  • struct(値型)
  • class(参照型)
  • クラス(クラスが継承された型)※上のclassとは別物です.
  • インターフェース

などを指定できます.(他にもあります

よく使われるのがインターフェースです.

例えば,

int型には,IComparable,IFormattable,IConvertible,IComparable<int32>,IEquatable<int32>インタフェースが実装されています.

double型には,IComparable,IFormattable,IConvertible,IComparable<Double>,IEquatable<Double>インターフェースが実装されています.

IComparableインターフェースを実装している型を指定する場合,次のように記述します.

IComparableインターフェースを制約条件に指定したので,CompareToメソッドを使う事ができるようになります.

今回はt1とt2を比較し,t1の値の方が大きい場合はTrueを,

それ以外はFalseを返すようにします.

実際にMainメソッドから呼び出して確認してみます.

実行結果

余談ですが,ジェネリックを使わずに同じような物を記述しようとすると次のようになります.(今回はint型とdouble型の比較結果を出す処理のみ記述します.)

オーバーロードを多用して,4パターンのメソッドを記述しないといけません.

なので,ジェネリックを使った方が簡単に書く事ができます.

実行結果はジェネリックを使った物と同じなので割愛します.