ページ

2009年10月22日木曜日

[C#] C# 4.0 の Indexed Properties

Indexed Properties in C# 4.0 より。
ええと、何やら C# 4.0 では

// before
excel.get_Range("A1").set_Value(Type.Missing, "ID");

// after
excel.Range["A1"].Value = "ID";

と書くことができるそうです。
Visual Studio 2010 beta 2 で対応しているとのこと。

ん?こんな機能あったっけ?
と思ったんですが、上記記事に 「C# 4.0 language specificationC# Future page にもまだ公開されてない。なぜなら、ごく最近デザインチェンジがあって実装されたから」 とかあります。

記事によると、Indexed Properties は、get_X()、set_X() を X[] として呼び出せるようにするシンタックスシュガーで、C# コンパイラが get_ もしくは set_ の呼び出しに置き換えるそうです。
また、パラメータはすべてオプショナルとのこと。そしてパラメータ無しの場合は [] 自体を省略できるし、[] を書いても合法だそうです。(省略できるってのはすごいな)

IDE のインテリセンスやパラメータヘルプなども対応済みとのこと。ただし、Quick Info はまだ get_ set_ 形式のものを表示するそうです。

うーん、まぁ、確かに get_ set_ はすっきり書けるようにはなりますが...
ところで、私は最初の例がそもそも理解できてません。
Value = “ID” は Value[] = “ID” と同じで、なので set_Value(“ID”) になるってのはわかります。
けど、何でそれが set_Value(Type.Missing, “ID”) と同じ意味になるんだろ?
C# 4.0 の Optional Arguments が使われてるとしても、あれは C++ と同じでパラメータの最後からしか省略できないはずですし。
Named Arguments が使われてるわけじゃないですし。
まさか型から引数の位置を推測するなんてことができるようになるわけじゃないですよね?
これって、単にサンプルの書き間違いで Type.Missing が余計だったってこと?
# Visual Studio 2010 beta 2 を入れてないので試せない orz


0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。