2009-04-20 18 views
2

属性は、コメント(または署名レベルでのxmlコメント)の使用に比べてどのような利点がありますか?私はこのサイトのどこかのC#セクションにスレッドがあるのを覚えていますが、今は見つけることができません。属性vsコメント

また、メソッドの特定のパラメータに属性を適用することもできますか(これは私がどこかで読んだインタビューの質問です)。

答えて

4

コメントは、開発者の便宜のためのもので、どのようなクラスとメソッドについて見ることができます。

アトリビュートは、開発するソリューションに役立ちます。これは、アトリビュートを追加するクラスの操作方法を記述するために使用できます。

はい、パラメータに対して属性を使用できますが、私の経験上、これは複雑なコードになります。再設計を検討して、構造体またはクラスにグループ化することができます。

ここ属性についてのリンクです:

http://en.csharp-online.net/Attributes

希望は、これが

1

Attributesは、コメントのケースではない実行時にアクセスすることができます。

実際、属性とコメントは全く異なる2つのもので、全く異なる2つの目的を果たします。属性はあなたのコードを「読み」のコンパイラ/ランタイムにヒントを提供することを目指しながら、

コメントは、私は属性とコメントがどのように関連しているか理解していない

2

..あなたのコードを読んで、プログラマにヒントを提供することを目指します。属性はクラス/オブジェクトに特定の機能を追加しますが、コメントはインラインのドキュメントを意味します。

属性を使用してメタデータの追加を容易にすることができます(たとえば、Author(文字列名)属性を使用してクラスの作成者などを示す)、そのメタデータの抽出を容易にします。比較を見ることはできません。

+0

属性はオブジェクトに情報を追加するために使用されることがありますが、追加機能はありません。あなたが与えるAuthor(文字列名)の例のように。それは私が考えている唯一の比較です。 – dotnetdev

1

一般に、ソースコードをプログラムによって何とか(通常は.NETのリフレクションで)処理する予定がある場合は、属性が使用されます。XMLコメントでも同じことを行うには、コメントの書式と解析のための特別な規則ソースファイルは自分で作成してください。そのような規則は属性のようにコンパイル時には簡単にチェックできません。

1

カスタム属性は、リフレクションを使用して実行時にアクセスされることを意味しているのに役立ちます。メソッドパラメータ、ジェネリック型パラメータ、メソッド戻り値の型、アセンブリ、型宣言、型メンバー、およびモジュールに適用できます。

1

一般に、XMLコメントの属性を比較することはできません。後者は最終的にはコードとはまったく関係がありませんが、属性はメタデータセクションのコンパイルされたアセンブリに残ります。

あなたの質問の後半部分に関しては、これは実際に可能である:ここでは

[return:MySecondAttribute] void Foo([MyAttribute] int bar) 

MySecondAttributeは、戻り値に適用され、MyAttributebarをパラメータに適用されます。アセンブリレベルで属性を適用するには、return:assembly:に置き換えます。

関連する問題