14章属性

 .NETでは、コンポーネント、型、メンバに対して属性を付けられます。属性には、フレームワーク、ツール、コンパイラ、CLRの振る舞いを制御したり変更したりするという目的があります。例えば、「1章 C#の基礎」では[TestClass]という属性を付けたクラスを使いました。[TestClass]が付いたクラスは、テストスイートの一部として実行されるテストを持っていることを単体テストフレームワークに伝えます。

 属性は、それ自身では何も行わない情報の受動的なコンテナです。現実世界で例えると、宛先と追跡情報が書かれた出荷ラベルを印刷して荷物に貼った場合、ラベルそのものが荷物を宛先に届けるわけではありません。出荷ラベルは、荷物が運送会社の手に渡ったときにだけ役に立ちます。運送会社は荷物を預かると、ラベルを確認して荷物の配送方法を判断します。したがって、ラベルは重要ですが、結局はシステムに必要な情報を与えるという役割でしかないのです。.NET属性も同様の役割を持ちます。何かが属性を探し求める場合にのみ効果を発揮します。CLRやコンパイラが処理する属性もありますが、その数は多くありません。大半の属性は、フレームワーク、ライブラリ、ツール(単体テストランナーなど)、自分のコードによって使われます。

14.1 属性の適用

 型システムに余計な概念を持ち込まれないようにするため、.NETでは.NETの型のインスタンスとして属性を定義しています。属性として用いるための型はSystem.Attributeクラスから継承されなければいけませんが、その他の点では変わりはありません。属性を適用するには、型の名前を角括弧で括り、通常は属性のターゲットの直前に置きます。例14-1では、Microsoftのテストフレームワークの属性を示します。ここでは、実行したいテストがあること示す属性をクラスに適用します。また、個々のメソッドにもテストであることをテストフレームワークに通知するための属性を適用します。さらに、個々のテストの前に実行される初期化コードを含むことを表す属性も適用します。 ...

Get プログラミングC# 第8版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.