C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の事前定義属性(Predefined Attributes)とは?代表的な3種類をわかりやすく解説

C#には、あらかじめ言語側で用意されている「事前定義属性(Predefined Attributes)」が存在します。これらを活用することで、クラスやメソッドに追加情報を付与し、コンパイラの動作を制御できます。

代表的な事前定義属性は、以下の3つです。

  • AttributeUsage
  • Conditional
  • Obsolete

AttributeUsage属性

AttributeUsageは、独自に作成したカスタム属性クラスが「どのように使用できるか」を記述するための属性です。属性を適用できる対象(クラス、メソッド、プロパティなど)や、同一要素への複数回適用の可否などを指定できます。

構文は次のとおりです。

[AttributeUsage (
    validon,
    AllowMultiple = allowmultiple,
    Inherited = inherited
)]
  • validon:属性を適用できる言語要素(AttributeTargets)を指定します。
  • AllowMultiple:同じ要素に複数回適用できるかどうかをbool値で指定します。
  • Inherited:派生クラスへ属性を継承するかどうかをbool値で指定します。

Conditional属性

Conditionalは、条件付きコンパイルを行うメソッドに対して付与される属性です。指定したプリプロセッサ識別子(シンボル)が定義されている場合にのみ、そのメソッド呼び出しがコンパイルされます。

たとえばデバッグビルドでのみ実行したいログ出力処理などに利用され、「Debug」や「Trace」といったシンボルを条件として指定するのが一般的です。

構文は次のとおりです。

[Conditional(
    conditionalSymbol
)]

使用例:

[Conditional("DEBUG")]
public void DebugLog(string message) {
    Console.WriteLine(message);
}

この場合、DEBUGシンボルが定義されている環境でのみ、DebugLogメソッドの呼び出しが有効になります。

Obsolete属性

Obsoleteは、「今後使用すべきではないプログラム要素」に付与する属性です。古くなったAPIなどにこの属性を指定しておくと、その要素を使用したコードに対してコンパイラが警告またはエラーを出力してくれます。

構文は次のとおりです。

[Obsolete (
    message
)]

[Obsolete (
    message,
    iserror
)]
  • message:代替手段などを伝えるメッセージ文字列を指定します。
  • iserror:trueを指定すると警告ではなくコンパイルエラーになります。falseの場合は警告のみ表示されます。

使用例:

[Obsolete("代わりにNewMethodを使用してください", false)]
public void OldMethod() {
    // 古い処理
}

まとめ

C#の事前定義属性を使いこなすことで、カスタム属性の適用範囲の制御(AttributeUsage)、条件付きコンパイル(Conditional)、非推奨APIの明示(Obsolete)を実現できます。特にライブラリ開発では、Obsoleteによる非推奨通知が保守性向上に大きく役立ちますので、ぜひ活用してみてください。

  1. Pythonのファイルオブジェクトの主な属性とメソッドを徹底解説

    Pythonでは、open()関数を使ってファイルを開くと「ファイルオブジェクト」が返されます。このオブジェクトは、ファイルの読み書きや状態管理を行うための多数の属性とメソッドを持っています。本記事では、特によく使われるメソッドと属性について、具体例を交えながらわかりやすく解説します。 よく使われるファイルオブジェクトのメソッド close() ― 開いたファイルを閉じます。ファイル操作が終わったら必ず呼び出し、リソースを解放しましょう。 next() ― ファイルをイテレータとして扱う際に呼び出されるメソッドです。for line in f: のようにforループでファイルを回すとき、この

  2. Pythonの関数属性とは?getattr・setattrを使った属性の設定と取得方法を解説

    Pythonでは「すべてがオブジェクト」という設計思想のもと、ほぼすべてのデータに属性やメソッドが備わっています。実は関数もオブジェクトであり、他のオブジェクトと同じように属性(アトリビュート)を持つことができます。すべての関数には、組み込み属性として __doc__ が用意されています。これは関数のソースコード内に定義されたドキュメント文字列(docstring)を返す属性です。さらに、Pythonでは既存の属性を参照するだけでなく、関数に対して新しい属性を自由に追加し、後からその値を取得することも可能です。属性を操作するための組み込み関数:getattr と setattr属性の扱いには、