【レポート】
少し旧聞になるが、8月2日から5日までマイクロソフト主催のカンファレンス「Tech・Ed 2005 Yokohama」が開催された。このカンファレンスで、2005年11月17日にVisual Studio 2005日本語版(以下VS2005)の発表会が行われることがアナウンスされた。
VS2005の登場と同時に.NET FrameworkはVer2.0となり、初のメジャーバージョンアップを迎える。ここでは.NET Frameworkの中核を担う言語であるC#とその開発環境について、今回のバージョンアップで強化される点をTech・Edで行われたセッションの内容をベースに紹介する。
Ver1.1までは、不特定個数のデータを扱うには一般的にはArrayListクラスが利用されていた。ArrayListクラスは内部的にはデータをobject型として扱っているため、以下のような問題点が存在していた。
これらの問題点を解決するために導入されたのがジェネリックである。ジェネリックを利用すると、どのような型でも同じロジックで処理できるクラスを作成することができる。またジェネリックを使用して作成されたクラスを使う場合は、クラスを定義する時点で利用したい型をパラメータとして与えるだけでよい。
.NET Framework 2.0で提供されるSystem.Collections.Generic.Listクラスを利用するときの例をみてみよう。int型のデータを利用する場合は次のように定義する。
もし、独自に作成したTest型のデータがあり、そのデータをListで扱いたい場合には次のように定義すればよい。
intListからデータを取り出す際にはint型のデータが、testListからデータを取り出す際にはTest型のデータが返ってくるので、取り出したデータのキャストは不要である。
匿名メソッドは、メソッドを呼び出すためにdelegateを定義したりメソッドを定義したりせず、直接呼び出したいメソッドを記述することで実行を可能にする。例としてボタンクリック時にメッセージボックスを表示するという処理を匿名メソッドで記述してみよう。
このように、delegateの引数定義を省略した記述も可能である。呼び出すメソッドがほんの数行程度である場合、記述が大幅に簡素化される。
Ver1.1まではint型等の値型にはnullを代入することはできなかった。この点はデータベースとの連携などにおいて不便を感じるところであり、実際、.NET Frameworkの内部にはNullable Typeの実装がいくつもあったそうである。
このNullable Typeを利用するためには、値型の定義時に"?"を型の後ろに記述する。
このように、xにはnullを代入することもint型が取り得る数値を代入することもできる。 また、Nullable Typeの導入に合わせて ?? オペレータが追加された。
上記はNullable Typeであるxの値をint型のiに代入する際、xがnullであれば0をiに代入する、という式となる。
C#を利用している上で便利な制御構造にforeachがある。Ver1.1までは、foreachに対応したクラスを独自に実装するには複雑なコーディングを行う必要があった。この実装を単純化するためにイテレータが導入された。
このように実装すると、TestClassはforeachからの呼び出しにおいて1から5を順に返す。つまり、foreachから呼ばれたときにyeild returnが1度ずつ呼び出されているのである。実際にイテレータを実装する場合には、クラス内に配列等の形式でデータを保持し、その配列を順にyeild returnで返すような実装を記述することになる。
なお、イテレータはクラス単位で実装できるだけでなく、メソッド単位で実装することも可能である。 下記はnumberPrintメソッドにイテレータを実装する例である。
パーシャルタイプの導入により、1つのクラスを複数のファイルに分割して記述することが可能となった。これにより、ユーザインタフェースの定義の記述と制御コードの記述をファイルを分けて保存することができるようになった。
Ver1.1までのASP.NETではこのユーザインタフェースと制御コードの分割(コードビハインド)を継承を用いることによって実現していた。これがVer2.0ではパーシャルタイプにより実現されることになる。 また、WindowsフォームではVer2.0ではじめてユーザインタフェースと制御コードの分割が行われるようになっている。
強化点の多くは、.NET Framework自体を作成している中でMicrosoft自身が必要であると感じた機能であるようだ。このため、これらの強化点により、最も恩恵を受けるのは独自にフレームワークを実装しているユーザではないだろうか。
特にジェネリックスやイテレータはフレームワークを作成する場合に非常に魅力的な機能であると思われる。
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
【レポート】CP+2012 - 「EOS-1D X」展示や吉高由里子のトークショーに人だかりが - キヤノン [21:35 2/10] 家電 |
|
MEDIAS LTE購入者向けキャンペーン - 先着5,000名にモバイル充電器を提供 [21:31 2/10] 携帯 |
|
ドコモ、「GALAXY S II LTE」のバージョンアップを2月13日に実施 [21:26 2/10] 携帯 |
|
レノボ・ジャパン、ウェブ広告モデルを一般公募 - 新生活キャンペーンの一環で [21:21 2/10] パソコン |
|
ドコモのLG製Androidタブレット/スマートフォンにバージョンアップ提供 [21:19 2/10] 携帯 |