Obsolete属性とは?

Obsolete属性は、Unityに限らずC#言語の標準的な属性です。

C#では、クラスやインターフェイス、メソッドなどのプログラム要素に情報を付与するため、

属性(Attribute)を使用しますが、Obsoleteもその一つです。

Obsolete属性の役割

Obsolete属性は、Unityも含めたC#言語で利用できますが、

この属性をクラスなどに追加するとその要素を「非推奨」としてマークすることが出来ます。

それによってそのコードが使用された際に警告やエラーを表示することが出来ます。

Obsolete属性を設定できる要素

Obsolete属性は以下の要素に設定できます。

  • class
  • interface
  • フィールド(クラスのメンバー変数)
  • プロパティ
  • メソッド

などです。

以下はクラスに設定した例です。

using System;

[Obsolete]
public class TestPlayer
{
}

このコードがコンパイルされると以下の様に警告が表示されます。

Obsolete属性に引数を指定する

メッセージ

Obsolete属性には、引数でメッセージを渡すことも出来ます。

using System;

[Obsolete("TestPlayerは使用しなくなりました。代わりにNewPlayerを使用してください")]
public class TestPlayer
{
}

警告と一緒に指定したメッセージを表示されます。

エラー

第二引数にtrueを指定することで、そのObsoleteをエラーとすることも出来ます。

using System;

[Obsolete("TestPlayerは使用しなくなりました。代わりにNewPlayerを使用してください", true)]
public class TestPlayer
{
}

以下の様にエラー扱いになります。

新しい機能への移行を強制したい場合に使用できます。

MonoBehaviourを継承したクラスに設定した場合

UnityMonoBehaviourを継承したコンポーネントクラスにも、Obsolete属性を設定できます。

using System;

[Obsolete("このクラスは非推奨になりました。")]
public class ObsoleteTest : MonoBehaviour
{
    private void Awake()
    {
        var testPlayer = new TestPlayer();
    }
}

この場合、インスペクタ上に警告が表示されるようになります。

エラー扱いにすると以下の様になりますが、このまま実行することは可能です。

(Deprecated) と表示されていますが、非推奨という意味になります。

まとめ

今回はObsolete属性について解説しました。

Obsolete属性を使用することで、古くなったコードを使用している場合に警告やエラーを表示することが出来ます。

長期間開発を行っていると、初期に作った仮のコードがずっと使われていたりすることがあります。

その仮のコードにObsolete属性を付与することで使用している箇所を把握したり、

新しいコードへ載せ替えるよう促すことが出来ます。

個人で開発をしている場合は出番が少ないかもしれませんが、

チームで長期の開発を行う場合は使う機会が割とありそうです。

覚えておくといつか役に立つかもしれません。

🔗関連ページ