共通属性 (C#)Common Attributes (C#)

このトピックでは、C# プログラムで最もよく使用される属性について説明します。This topic describes the attributes that are most commonly used in C# programs.

グローバル属性Global Attributes

ほとんどの属性は、クラスやメソッドなど、特定の言語要素に適用されます。ただし、属性の中にはグローバルなものがあり、アセンブリまたはモジュール全体に適用されます。Most attributes are applied to specific language elements such as classes or methods; however, some attributes are global—they apply to an entire assembly or module. たとえば、AssemblyVersionAttribute 属性は、次のように、バージョン情報をアセンブリに埋め込むときに使用できます。For example, the AssemblyVersionAttribute attribute can be used to embed version information into an assembly, like this:

[assembly: AssemblyVersion("1.0.0.0")]  

ソース コードでは、グローバル属性は、トップレベルの using ディレクティブより後、型、モジュール、または名前空間の宣言より前に指定します。Global attributes appear in the source code after any top-level using directives and before any type, module, or namespace declarations. グローバル属性は複数のソース ファイルに指定できますが、それらのファイルは、1 つのコンパイル パスでコンパイルする必要があります。Global attributes can appear in multiple source files, but the files must be compiled in a single compilation pass. C# プロジェクトでは、グローバル属性は AssemblyInfo.cs ファイルに配置されます。In C# projects, global attributes are put in the AssemblyInfo.cs file.

アセンブリの属性は、アセンブリに関する情報を提供する値です。Assembly attributes are values that provide information about an assembly. これらは次のカテゴリに分けられます。They fall into the following categories:

  • アセンブリ ID 属性Assembly identity attributes

  • 情報属性Informational attributes

  • アセンブリ マニフェスト属性Assembly manifest attributes

アセンブリ ID 属性Assembly Identity Attributes

アセンブリの ID は、名前、バージョン、カルチャの 3 つの属性によって識別されます (適用できる場合は厳密な名前も使用されます)。Three attributes (with a strong name, if applicable) determine the identity of an assembly: name, version, and culture. アセンブリの完全な名前を形成するこれらの属性は、コード内でアセンブリを参照するときに必要になります。These attributes form the full name of the assembly and are required when you reference it in code. アセンブリのバージョンとカルチャは、属性を使用して設定できます。You can set an assembly's version and culture using attributes. ただし名前の値は、コンパイラ、Visual Studio IDE の [アセンブリ情報] ダイアログ ボックス、またはアセンブリ リンカー (AI.exe) によってアセンブリの作成時に設定されます。このとき、設定はアセンブリ マニフェストが含まれたファイルに基づきます。However, the name value is set by the compiler, the Visual Studio IDE in the Assembly Information Dialog Box, or the Assembly Linker (Al.exe) when the assembly is created, based on the file that contains the assembly manifest. AssemblyFlagsAttribute 属性は、アセンブリの複数のコピーが共存できるかどうかを指定します。The AssemblyFlagsAttribute attribute specifies whether multiple copies of the assembly can coexist.

次の表に ID 属性を示します。The following table shows the identity attributes.

属性Attribute 目的Purpose
AssemblyName アセンブリの ID を完全に記述します。Fully describes the identity of an assembly.
AssemblyVersionAttribute アセンブリのバージョンを指定します。Specifies the version of an assembly.
AssemblyCultureAttribute アセンブリがサポートするカルチャを指定します。Specifies which culture the assembly supports.
AssemblyFlagsAttribute 同じコンピューター、同じプロセス、または同じアプリケーション ドメインでの side-by-side 実行をアセンブリがサポートするかどうかを指定します。Specifies whether an assembly supports side-by-side execution on the same computer, in the same process, or in the same application domain.

情報属性Informational Attributes

情報属性は、追加の会社情報または製品情報をアセンブリに指定する場合に使用できます。You can use informational attributes to provide additional company or product information for an assembly. 次の表は、System.Reflection 名前空間で定義されている情報属性を示しています。The following table shows the informational attributes defined in the System.Reflection namespace.

属性Attribute 目的Purpose
AssemblyProductAttribute アセンブリ マニフェストの製品名を指定するカスタム属性を定義します。Defines a custom attribute that specifies a product name for an assembly manifest.
AssemblyTrademarkAttribute アセンブリ マニフェストの商標を指定するカスタム属性を定義します。Defines a custom attribute that specifies a trademark for an assembly manifest.
AssemblyInformationalVersionAttribute アセンブリ マニフェストの補足バージョンを指定するカスタム属性を定義します。Defines a custom attribute that specifies an informational version for an assembly manifest.
AssemblyCompanyAttribute アセンブリ マニフェストの会社名を指定するカスタム属性を定義します。Defines a custom attribute that specifies a company name for an assembly manifest.
AssemblyCopyrightAttribute アセンブリ マニフェストの著作権を指定するカスタム属性を定義します。Defines a custom attribute that specifies a copyright for an assembly manifest.
AssemblyFileVersionAttribute Win32 ファイル バージョン リソースの特定のバージョン番号を使用するようコンパイラに指示します。Instructs the compiler to use a specific version number for the Win32 file version resource.
CLSCompliantAttribute アセンブリが共通言語仕様 (CLS) に準拠しているかどうかを示します。Indicates whether the assembly is compliant with the Common Language Specification (CLS).

アセンブリ マニフェスト属性Assembly Manifest Attributes

アセンブリ マニフェスト属性を使用すると、アセンブリ マニフェストの情報を指定できます。You can use assembly manifest attributes to provide information in the assembly manifest. ここには、タイトル、説明、既定の別名、構成が含まれます。This includes title, description, default alias, and configuration. 次の表は、System.Reflection 名前空間で定義されているアセンブリ マニフェスト属性を示しています。The following table shows the assembly manifest attributes defined in the System.Reflection namespace.

属性Attribute 目的Purpose
AssemblyTitleAttribute アセンブリ マニフェストのアセンブリのタイトルを指定するカスタム属性を定義します。Defines a custom attribute that specifies an assembly title for an assembly manifest.
AssemblyDescriptionAttribute アセンブリ マニフェストのアセンブリの説明を指定するカスタム属性を定義します。Defines a custom attribute that specifies an assembly description for an assembly manifest.
AssemblyConfigurationAttribute アセンブリ マニフェストのアセンブリの構成 (製品版やデバッグなど) を指定するカスタム属性を定義します。Defines a custom attribute that specifies an assembly configuration (such as retail or debug) for an assembly manifest.
AssemblyDefaultAliasAttribute アセンブリ マニフェストのわかりやすい既定の別名を定義します。Defines a friendly default alias for an assembly manifest

Obsolete 属性Obsolete Attribute

Obsolete 属性は、使用が推奨されなくなったプログラム エンティティをマークします。The Obsolete attribute marks a program entity as one that is no longer recommended for use. その後、非推奨の印が付いたエンティティが使用されるたびに、この属性の構成に従って警告かエラーが生成されます。Each use of an entity marked obsolete will subsequently generate a warning or an error, depending on how the attribute is configured. 次に例を示します。For example:

[System.Obsolete("use class B")]  
class A  
{  
    public void Method() { }  
}  
class B  
{  
    [System.Obsolete("use NewMethod", true)]  
    public void OldMethod() { }  
    public void NewMethod() { }  
}  

この例では、Obsolete 属性はクラス A とメソッド B.OldMethod に適用されています。In this example the Obsolete attribute is applied to class A and to method B.OldMethod. B.OldMethod に適用された属性コンストラクターの 2 番目の引数が true に設定されているため、このメソッドではコンパイル エラーが発生します。一方、クラス A が使用されると、警告が生成されます。Because the second argument of the attribute constructor applied to B.OldMethod is set to true, this method will cause a compiler error, whereas using class A will just produce a warning. しかし、B.NewMethod の呼び出しでは、警告もエラーも生成されません。Calling B.NewMethod, however, produces no warning or error.

最初の引数として属性コンストラクターに指定された文字列は、警告またはエラーの一部として表示されます。The string provided as the first argument to attribute constructor will be displayed as part of the warning or error. たとえば、前の定義でこれを使用すると、次のコードで 2 つの警告と 1 つのエラーが生成されます。For example, when you use it with the previous definitions, the following code generates two warnings and one error:

// Generates 2 warnings:  
// A a = new A();  
  
// Generate no errors or warnings:  
B b = new B();  
b.NewMethod();  
  
// Generates an error, terminating compilation:  
// b.OldMethod();  

クラス A の警告が 2 つ生成されます。1 つはクラス参照の宣言の警告で、もう 1 つはクラス コンストラクターの警告です。Two warnings for class A are generated: one for the declaration of the class reference, and one for the class constructor.

Obsolete 属性は引数なしで使用できますが、対象の項目が古い理由と代用する項目の説明を加えておくことをお勧めします。The Obsolete attribute can be used without arguments, but including an explanation of why the item is obsolete and what to use instead is recommended.

Obsolete 属性は、1 回だけ使用できる属性であり、属性を使用できる任意のエンティティに適用できます。The Obsolete attribute is a single-use attribute and can be applied to any entity that allows attributes. ObsoleteObsoleteAttribute の別名です。Obsolete is an alias for ObsoleteAttribute.

Conditional 属性Conditional Attribute

Conditional 属性を使用すると、プリプロセス識別子に依存したメソッドの実行を指定できます。The Conditional attribute makes the execution of a method dependent on a preprocessing identifier. Conditional 属性は ConditionalAttribute の別名であり、メソッドまたは属性クラスに適用できます。The Conditional attribute is an alias for ConditionalAttribute, and can be applied to a method or an attribute class.

この例では、Conditional は、プログラム固有の診断情報の表示を有効または無効にするメソッドに適用されています。In this example, Conditional is applied to a method to enable or disable the display of program-specific diagnostic information:

#define TRACE_ON  
using System;  
using System.Diagnostics;  
  
public class Trace  
{  
    [Conditional("TRACE_ON")]  
    public static void Msg(string msg)  
    {  
        Console.WriteLine(msg);  
    }  
}  
  
public class ProgramClass  
{  
    static void Main()  
    {  
        Trace.Msg("Now in Main...");  
        Console.WriteLine("Done.");  
    }  
}  

TRACE_ON 識別子が定義されていない場合、トレース出力は表示されません。If the TRACE_ON identifier is not defined, no trace output will be displayed.

Conditional 属性は、(リリース ビルドではなく) デバッグ ビルドのトレース機能とログ機能を有効にするために、DEBUG 識別子と共によく使用されます。これは次のようになります。The Conditional attribute is often used with the DEBUG identifier to enable trace and logging features for debug builds but not in release builds, like this:

[Conditional("DEBUG")]  
static void DebugMethod()  
{  
}  

条件付きの印が付いたメソッドが呼び出されると、指定のプリプロセッサ シンボルの有無に従って、呼び出しの実行か省略が決定されます。When a method marked as conditional is called, the presence or absence of the specified preprocessing symbol determines whether the call is included or omitted. シンボルが定義されている場合は呼び出しが実行され、定義されていない場合は省略されます。If the symbol is defined, the call is included; otherwise, the call is omitted. 次のように、#if…#endif ブロック内でメソッドを囲むよりも Conditional を使用した方が、すっきりとして洗練されているうえ、エラーも少なくなります。Using Conditional is a cleaner, more elegant, and less error-prone alternative to enclosing methods inside #if…#endif blocks, like this:

#if DEBUG  
    void ConditionalMethod()  
    {  
    }  
#endif  

条件付きメソッドは、クラスまたは構造体の宣言内のメソッドである必要があります。また、戻り値を持つことはできません。A conditional method must be a method in a class or struct declaration and must not have a return value.

複数の識別子の使用Using Multiple Identifiers

メソッドに複数の Conditional 属性が付いている場合、そのメソッドの呼び出しは、1 つ以上の条件付きシンボルが定義されているときに実行されます (つまり、シンボルは OR 演算子によって論理的にリンクされています)。If a method has multiple Conditional attributes, a call to the method is included if at least one of the conditional symbols is defined (in other words, the symbols are logically linked together by using the OR operator). この例では、AB のどちらかがあると、メソッドの呼び出しが実行されます。In this example, the presence of either A or B will result in a method call:

[Conditional("A"), Conditional("B")]  
static void DoIfAorB()  
{  
    // ...  
}  

AND 演算子で論理的にリンクされたシンボルの効果を実現するには、条件付きメソッドを連続して定義します。To achieve the effect of logically linking symbols by using the AND operator, you can define serial conditional methods. たとえば、次の 2 番目のメソッドは、AB が両方定義されている場合にのみ実行されます。For example, the second method below will execute only if both A and B are defined:

[Conditional("A")]  
static void DoIfA()  
{  
    DoIfAandB();  
}  
  
[Conditional("B")]  
static void DoIfAandB()  
{  
    // Code to execute when both A and B are defined...  
}  

属性クラスでの Conditional の使用Using Conditional with Attribute Classes

Conditional 属性は、属性クラスの定義にも適用できます。The Conditional attribute can also be applied to an attribute class definition. この例では、カスタム属性 Documentation は、DEBUG が定義されている場合にのみ、情報をメタデータに追加します。In this example, the custom attribute Documentation will only add information to the metadata if DEBUG is defined.

[Conditional("DEBUG")]  
public class Documentation : System.Attribute  
{  
    string text;  
  
    public Documentation(string text)  
    {  
        this.text = text;  
    }  
}  
  
class SampleClass  
{  
    // This attribute will only be included if DEBUG is defined.  
    [Documentation("This method displays an integer.")]  
    static void DoWork(int i)  
    {  
        System.Console.WriteLine(i.ToString());  
    }  
}  

呼び出し元情報属性Caller Info Attributes

呼び出し元情報の属性を使用すると、メソッドへの呼び出し元に関する情報を取得できます。By using Caller Info attributes, you can obtain information about the caller to a method. ソース コードのファイル パス、ソース コードの行番号、呼び出し元のメンバー名を取得できます。You can obtain the file path of the source code, the line number in the source code, and the member name of the caller.

メンバー呼び出し元情報を取得するには、省略可能なパラメーターに適用される属性を使用します。To obtain member caller information, you use attributes that are applied to optional parameters. 省略可能な各パラメーターでは既定値が指定されます。Each optional parameter specifies a default value. 次の表は、System.Runtime.CompilerServices 名前空間で定義されている呼び出し元情報の属性の一覧です。The following table lists the Caller Info attributes that are defined in the System.Runtime.CompilerServices namespace:

属性Attribute 説明Description Type
CallerFilePathAttribute 呼び出し元を含むソース ファイルのフル パスです。Full path of the source file that contains the caller. これはコンパイル時のパスです。This is the path at compile time. String
CallerLineNumberAttribute メソッドの呼び出し元であるソース ファイルの行番号。Line number in the source file from which the method is called. Integer
CallerMemberNameAttribute 呼び出し元のメソッド名またはプロパティ名。Method name or property name of the caller. 詳細については、「呼び出し元情報 (C#)」を参照してください。For more information, see Caller Information (C#). String

呼び出し元情報属性の詳細については、「呼び出し元情報 (C#)」を参照してください。For more information about the Caller Info attributes, see Caller Information (C#).

関連項目See also