人生を書き換える者すらいた。人生を書き換える者すらいた。»2005.04.30Attributeの話(1)さて、今回から何度かに分けて.NETのAttributeの話をしようかと思います。Chartの両方で使っているテクニックを例に、Attributeの使い方を説明します。して似たような仕組みが導入されました。Javaと.NETの両方でサポートされたとなれば今後普及するスタイルになるでしょう。うまくはまれば格好よくキマるプログラミングテクニックです。型情報の拡張とはこう言われても何を意味するのか、どう使うのかが分からない人はけっこういると思います。概念上は昔からあります。Javaではオブジェクトをロックしてから実行すべきメソッドを、synchronizedをつけて宣言します。{...}このsynchronizedをつけると、オブジェクトのロック・アンロックはJavaVMがランタイムに自動的にやってくれるようになります。synchronizedはJava言語のキーワードとして定義されたものですが、メソッドに対してオブジェクトのロックについての付加情報を指示しているととらえることができます。同類と考えることができます。いったキーワードも、クラス・メソッド・フィールドに追加的な意味を与えることができるという点で、型情報を拡張していると考えることができます。これらのキーワードがなくても、同じ動作をするプログラムを書くことは可能です。手動でメソッドの同期をするコードを書くなどの手間が発生し、面倒くさいわけです。何かの意味をランタイムに示すものであるなくても動作上同じプログラムを書くことは可能だが、面倒くさいといった特徴を持ったものということになります。.NETのAttributeなり、Javaのannotationという機能が登場する前は、このような動作はプログラム言語の仕様であらかじめ決められたものしか使えませんでいた。annotationの発想です。当然のことながら、独自に定義した拡張情報はVMには何の影響も与えません。拡張情報を解釈するところも自分で作る必要があります。最初から普通にプログラムを書けばいいと思うかもしれませんが、そうではないのです。実例の紹介は次回にします。追記:次回はこちらです。村上龍ってこんなにダメだったのか。