属性の使用 (C# プログラミング ガイド)
更新 : 2007 年 11 月
属性は、ほとんどすべての宣言に使用できます。ただし、一部の属性は、特定の種類の宣言に対してのみ使用できます。属性を指定するときは、属性の名前を角かっこで囲み、適用するエンティティの宣言の前に置きます。たとえば、DllImport 属性をメソッドに適用する場合は、次のように宣言します。
[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static void SampleMethod();
詳細については、「DllImportAttribute クラス」を参照してください。
属性の多くにはパラメータがあり、位置、名前なし、または名前で特定されます。位置で決まるパラメータは、特定の順序で指定する必要があり、省略できません。名前付きのパラメータは省略でき、自由な順序で指定できます。位置で決まるパラメータを最初に指定します。たとえば、次の 3 つの属性は同じものです。
[DllImport("user32.dll")]
[DllImport("user32.dll", SetLastError=false, ExactSpelling=false)]
[DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]
1 番目のパラメータである DLL 名は位置で決まるので、常に最初に指定する必要があります。それ以外のパラメータは名前付きです。この場合、名前付きパラメータはどちらも既定で false なので、省略できます。既定のパラメータ値については、各属性のドキュメントを参照してください。
1 つの宣言で複数の属性を指定できます。その場合、個別に角かっこで囲むか、または同じ角かっこの中に入れます。
void MethodA([In][Out] ref double x) { }
void MethodB([Out][In] ref double x) { }
void MethodC([In, Out] ref double x) { }
一部の属性は、特定のエンティティに対して 2 回以上指定できます。次の例では、Conditional 属性を 2 回使用しています。
[Conditional("DEBUG"), Conditional("TEST1")]
void TraceMethod()
{
// ...
}
メモ : |
---|
規則では、属性名の終わりにはすべて "Attribute" が付きます。これにより、属性と .NET Framework の他の項目を区別できます。ただし、属性を使用するときには、必ずしもこのサフィックスを使用する必要はありません。たとえば、[DllImport] は [DllImportAttribute] と等価ですが、.NET Framework での属性の実際の名前は DllImportAttribute です。 |