web-dev-qa-db-ja.com

C#ではいつ属性を使用する必要がありますか?

私は利用属性の例のいくつかを見ました、例えば(動的ファクトリーのマップとして) http://msdn.Microsoft.com/en-us/magazine/cc164170.aspx

属性を使用する利点は何ですか? http://msdn.Microsoft.com/en-gb/z0w1kczw(VS.80).aspx で参照を見つけることができますが、いつ、なぜそれを使用する必要があるのか​​わかりません。

44
ccppjava

.NET Frameworkでは、属性は、次のような多くの理由で使用できます。

  • シリアル化可能なクラスの定義

  • Webサービスで公開されるメソッドの選択

Attributesを使用すると、設計時にクラス、プロパティ、およびメソッドにdescriptionsを追加して、実行時にリフレクションを介して調べることができます。

この例を検討してください:

何らかの理由でまだ使用されている古いバージョンのメソッドを持つクラスがあり、Generic ListとLINQを効果的に使用し、同様の目的で新しいメソッドを持つクラスの新しいバージョンを考え出したとします。 。ライブラリの新しいバージョンで提供されている新しいものを開発者に好んでほしいと思います。どうすればいいの? 1つの方法は、ドキュメントに書き込むことです。より良い方法は、以下のように属性を使用することです。

public class AccountsManager
{
  [Obsolete("prefer GetAccountsList", true)]
  static Account[] GetAccounts( ) { }    
  static List<Account> GetAccountsList( ) { }      
}

プログラムのコンパイル時にobsoleteメソッドが使用される場合、開発者はこの情報を取得し、それに応じて決定します。

AccountManager.GetAccounts()は廃止されました:GetAccountsListを優先してください

また、必要に応じて Custom Attributes を作成して追加することもできます。

参照 :


お役に立てれば

33
Asad

私の推奨事項:属性を使用して、メカニズムに関する事実を述べるが、ビジネスドメインの側面をモデル化しない

詳細:

http://blogs.msdn.com/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx

24
Eric Lippert

属性は、クラスまたはクラスメンバーにメタデータを添付する場合や、動作を共有する各ユニットに特定のインターフェイスを実装する必要がない共通の動作を適用する場合に適しています。後者は アスペクト指向プログラミング の例です。

7

属性は、属しているメソッドまたはプロパティに関するメタデータと見なしてください。それはメンバーについてもっと何かを伝えます。

4
Gerrie Schenck

.NET Frameworkは、属性タイプを事前に定義して使用し、アプリケーションの実行時の動作を制御します。

[webmethod]属性を検討してください。実行時にフレームワークがこの属性を解決し、このメソッドがWebサービスで公開されることを決定します。

同様に、カスタム属性を記述して、実行時のアプリケーションの動作を制御できます。属性は、クラス、メソッド、プロパティ、デリゲート、列挙型、イベント、フィールドをターゲットにすることができます...

実行時に属性を解決するには、リフレクションを使用する必要があります。

詳細は [〜#〜] msdn [〜#〜] リンクを確認してください。

1
RameshVel