ページ

2005年8月18日木曜日

Nullable Boxing その2

Nullable Boxing」 で書いた nullable のデザインチェンジについてのその2。


Somasegar's WebLog:Nulls not missing anymore
開発部門の副社長である Somasegar 氏 の blog で今回のデザインチェンジについて書かれています。まず、



  • nullable なものを box 化すると null だったときは null に、null でなかったときはそれなりの値になる。

と。これはわかりやすいので OK と。
で、unbox 化のほうですが、私が上の記事で書いたように



  • たとえば int? を box 化すると、それは int でもあり int? でもある。
    だから
      int? i = 1;
      object o = i;
      int x = (int)o;
    と書ける。

というだけでなく、



  • int を box 化したものも、int てもあり int? でもある。
    だから
      int i = 1;
      object o = i;
      int? x = (int?)o;
    と書ける。

ということになるようです。
なるほどなぁ。型システムが nullable を認識しているから、unbox 化する際に nullable を引っぺがすことも、nullable にすることも自由にできるってわけですね。
しかも、
  int? x = 0;
  IComparable ic = x;
というようなこともできると。これは、int? である x から int を取り出して、その int が implements している IComparable を取り出している、ということでいいのかな?


sab39:How to completely screw up a good idea: Nullable types in C# 2.0
こちらの blog は日付 (2005年 4月 19日) から言って、今回のデザインチェンジとは無関係に書かれたものだと思いますが nullable の動作についてとてもわかりやすい表が載ってます。この表は



  • 普通の参照型
  • 理想的 (ideal) な nullable
  • Nint (C# で自分で実装した struct みたいです)
  • C# 2.0 beta2 での nullable

の比較になっているんですが、今回のデザインチェンジの内容からするとほぼ 「ideal な nullable」 の列の動作になったということなような気がします。(int? y = t ? 1 : null; という三項演算子はさすがに無理なような気がする。型システムというより C# コンパイラががんばればできそうな気はするけど)

0 件のコメント:

コメントを投稿