- 締切済み
C# 属性クラス
C#の属性クラスというものの便利な点がいまいちよく理解できません。 System.Attribute から派生したクラスであり、クラスやメソッドに付加情報を与えることができる、、、漠然としていて、では、実際にどのように便利なのか、属性クラスを使用しない場合と使用する場合の違いがよくわかりません。 一体どのように便利になるのでしょうか?? 教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- furyfox
- ベストアンサー率56% (58/103)
#1です。 >C++ならAttirbute的なものを持つBaseクラスを多重継承させれば良いでしょうが ちょっと誤解を与えるような内容でした。 C#(というか.Net Framework: C++/CLIやVB.netも含む)では クラスだけではなくメンバにもAttirbuteを持たせることができます。 補足ですがAttirbute自体もクラスでもある為 値だけでなく処理自体の実装もできます。
- furyfox
- ベストアンサー率56% (58/103)
Attributeを参照するクラスを使ってみると その有効性がわかると思います。 例えばフレームワークのPropertyGridクラスです。 このクラスは他のクラスの持っているプロパティを編集する フォームですが、このフォームに表示するか/非表示にするか や表示する説明の内容をAttributeで設定します。 Attributeというのは、このクラスがどういうものかというのを 文字列等で指定しておけるのです。 他のクラスはこのAttributeを参照する事でそのクラスに対する 処理を変化させるといった使い方ができます。 C++ならAttirbute的なものを持つBaseクラスを多重継承させれば良いでしょうが 多重継承が禁止されているC#でそういう事がしたい場合は Attributeを利用するといった感じでしょうか。
お礼
お返事が遅れて大変申し訳ありません。 使用してみないことには有効性云々はわかりませんよね、、、すいません。 憶測で、クラスのメンバ変数にGet/Setアクセサをつけてそのクラスの情報を参照したりするのとどう違うのだろう、と思ってしまいました。 デバッグビルドとリリースビルドで行う処理を変えることができる、ソースの著者名を埋め込む等等の記載もありましたが、それほど重要な利点ではないな、と、、、 きっと、「属性クラスを使用しなくても実現できる機能だが、属性クラスを使用するとこんな利点がある」、というようなことは、実際に使ってみないことにはわからないでしょうね。勉強不足です。。。 furyfoxさんがおっしゃられるような「多重継承が禁止されているC#でそういう事がしたい場合はAttributeを利用する」というところにもやっとですが、イメージがわいてきそうな気がします。 ありがとうございます。