2005年04月21日

implicit explicit

   このエントリーをはてなブックマークに追加 Clip to Evernote
implicit explicitというキーワードを使えば、独自に型変換機能を実装できます。
具体的例を示します。これは不快指数を扱うクラスです。
public struct DiscomfortIndex {
private double _index;

public DiscomfortIndex(double temperature, double humidity) {
_index = CalcIndex(temperature,humidity);
}
public DiscomfortIndex(double index) {
_index = index;
}

public double Index {
get { return _index; }
}

private static double CalcIndex(double temperature, double humidity) {
return 0.81 * temperature +
0.01 * humidity * (0.99 * temperature - 14.3) + 46.3;

}
public override string ToString() {
if ( Index <= 55 )
return "寒い";
if ( Index <= 60 )
return "肌寒い";
if ( Index <= 75 )
return "快適";
if ( Index <= 80 )
return "やや不快";
if ( Index <= 85 )
return "不快";
return "暑くてたまらない";
}
public static explicit operator DiscomfortIndex(double index) {
return new DiscomfortIndex(index);
}

public static implicit operator double(DiscomfortIndex di) {
return di.Index;
}
}

見て欲しいのは、最後の2つのstaticメソッドです。これにより、以下のようなコードが書けるようになります。
DiscomfortIndex di = (DiscomfortIndex)53.5;

このキャストにより、explicit で指定したメソッドが走ります。
また、
double n =  di;

で、implicit で指定した メソッドが走ります。
ただ、よっぽど上手く設計しないと、分け分からないコードになりそうですね。使い道はかなり限定されたものになると思います。

ちなみに、implicitは「暗黙の」 explicitは「明示的な」という意味だそうです。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/19634597