Widening and Narrowing

VB9 になって VB でも Operator キーワードによってオペレータの再定義ができるようになった。
Widening と Narrowing は型変換に対する指定で、C# の implicit/explicit のように指定するものだが、Widening と宣言された型変換は、変換過程において発生したすべての例外や変換エラーに関してレポートすることは許されない。かならず、目的の型に変換された値を返す正常フローをとらなければならないことになっている。
逆に、何らかの原因で変換に失敗して null を返したり、例外を発生させるような変換は、Narrowing で宣言しなければならない。IL としては Narrowing は op_Explicit に、Widening は op_Implicit へと変換される。
C# の User-defined implicit conversions あたりには類似の記述はないようだけど、VB は CType がそういう仕様だから仕方が無いのかな? となると、VB からも利用できる型変換の実装としては、VB 側のこのルールを順守しなければならないことになる、かな?