C# 変換演算子(implicitとexplicit)

   

C#では、C/C++のように型のキャスト(変換)が可能です。
キャストのための演算子としてimplicitとexplicitという変換演算子があります。

英単語としては、下記の意味があります。

implicit 暗黙
explicit 明白な

 

準備

2つの演算子を使った相互変換を行うクラスとして
メートルの2次元データクラス(Meterクラス)と、ミリメーターの2次元データクラス(MilliMeterクラス)を作成して実験をしてみます。

 

Meterクラス

 

MilliMeterクラス

 

implicit 変換演算子

implicit 変換演算子は、実装しているクラスを「別の型(クラス)」に変換するための実装を行います。

Meterクラスを使って、implicit 演算子を実装してみます。
implicit 変換演算子には、「MeterクラスをMilliMeterクラスに変換するための処理」を記述します。
ですので、戻り値は’MilliMeter’型、引数は’Meter’型となります。

Meterクラスのコードは下記のようになります。

プログラムの実装は下記のようになります。

 

 

このプログラムを実行すると結果は、

X=100(mm) Y=200(mm)

と表示されます。

 

explicit 変換演算子

explicit 変換演算子は、「別の型(クラス)」を実装しているクラスの型に変換するための実装を行います。

MilliMeterクラスを使ってexplicit 演算子を実装してみます。
explicit 変換演算子には、「MilliMeterクラスをMeterクラスに変換するための処理」を記述します。

ですので、戻り値は’Meter’型、引数は’MilliMeter’型となります。

コードは下記のようになります。

プログラムの実装は下記のようになります。

 

このプログラムを実行すると結果は、

X=0.1(m) Y=0.2(m)

と表示されます。

 

ちなみに・・・

今回の例に出てきた片方のクラスに、implicit 変換演算子と explicit 変換演算子の両方を実装するとどうなるか、試してみました。

Meterクラスに実装してみました。

 

実行するまでもなく、エラーになりました。

エラー CS0457 ‘MilliMeter’ から ‘Meter’ へ変換するときの、あいまいなユーザー定義の変換 ‘MilliMeter.explicit operator Meter(MilliMeter)’ および ‘Meter.explicit operator Meter(MilliMeter)’ です。

 

 - 未分類