2016年6月23日木曜日

[C#] Attribute(アトリビュート)

こんにちは。明月です。
今日は(Attribute)アトリビュートについて勉強します。C#のAttribute(アトリビュート)はJavaのアノテーションと同じ意味のキーワードです。クラスあるいはメソッドを実装する場合に必要な情報と特性を定義することの意味です。
そうすればC#から基本的に提供するAttribute(アトリビュート)とユーザーが作成して使う仕方について勉強してみましょう。


Attribute(アトリビュート)


Attribute 説明
CLSCompliant アセンブリのすべての型をCLSに合わせて使用
Obsolete 使用しないと要素を表す。
Conditional 全処理機を識別子によって実行する可否を決定
DllImport 非管理コードの形態で実行するメソッドを表す。
Dispid COMのDISpatchのIDを表す。
Serializable クラスあるいは構造体がシリアルライズにするのを表す。
Transaction トランザクションを無視になるか支援できるかを表す。

筆者も上の表の中で「DllImport」、「Serializable」、「Transaction」を使ったことがありあます。「DLLImport」の場合は「C」と「C++」あるいは「Win Com+」のDllライブラリファイルをC#にインポートするようにするアトリビュートです。



上の例は「DllImport」のアトリビュートでCom+ Dllライブラリを参照して使うものです。
「WritePrivateProfileString」と「GetPrivateProfileString」の場合は「C++」、「MFC」で開発したことがある方ならしてると思いますが、「Ini」環境ファイルを読み込むまたは書き込むような関数です。Windowの中で組込のメソッドですね。「MessageBox」の場合も旧Windowのメッセージの組込のメソッドです。




ここまで、C#から提供するアトリビュートを使う方法を勉強しました。
表としてはたくさんありますが、筆者も使ったことがないし、実際に「DllImport」以外のアトリビュートは使わないのでここまで勉強します。
これからはユーザーがアトリビュートを作成して使う方法を勉強します。




まず、アトリビュートを「Attribute」クラスから継承して作成します。ここで「AttributeUsage」のアトリビュートで「AttributeExam」のクラスはどのタイプのアトリビュートかを明示します。
「AttributeExam」の形態はクラス型なので、メンバ変数、プロパティ、メソッド、イベント等を作成できますが、アトリビュートとして使うものは「コンストラクタ」と「プロパティ」なのでメソッド、イベントは作成しません。
その後で[Program]クラスの「Print」メソッド上に「AttributeExam」のアトリビュートを宣言します。
アトリビュートは宣言だけでは何も意味がないので、ここからは「reflection」を通ってアトリビュートの値を取得します。そして、アトリビュートの値を出力します。


今まで勉強したとおりにアトリビュートはクラスやオブジェクトの意味ではなくて、実装するところでメソッドの情報の正義と特性の正義することで意味があります。
後で、フレームワーク(ORM,MVC等)を構築する時にこのアトリビュートは属性の正義、DI依存性のためオブジェクトを明示すること等の役で使っています。
OOPの高級文法を勉強するために、アトリビュートは大事なので流れはしっかり覚えていきましょう。

0 件のコメント