チームで開発を行っている時、使用禁止にしたいクラスやメソッドを周知させることができます。クラスやメソッドの別バージョンを追加した際、新しいものに誘導したい時に使用します。
エラーまたは警告を発生させる方法
使用禁止にしたいクラスやメソッドの前にObsolete属性を付与します。第一引数にコンパイルエラー(または警告)で表示したいメッセージを指定し、第二引数をtrueにするとエラー、falseにすると警告になります。-
C#
コンパイルエラーにする [Obsolete("コンパイル時に表示するメッセージ", true)] ワーニング(警告)にする [Obsolete("コンパイル時に表示するメッセージ", false)]
-
VB.NET
コンパイルエラーにする <Obsolete("コンパイル時に表示するメッセージ' を使用してください。", True)> ワーニング(警告)にする <Obsolete("コンパイル時に表示するメッセージ' を使用してください。", False)>
使用例
-
C#
public partial class Form1 : Form { private void Form1_Load(object sender, EventArgs e) { // ここで警告が発生 this.OldMethod(); // ここでエラーが発生 this.ObsoleteMethod(); // ここで警告が発生 OldClass old; // ここでエラーが発生 ObsoleteClass obsolete; } [Obsolete("このメソッドは廃止される予定です。代わりに'NewMethod()' を使用してください。", false)] private void OldMethod() { // 警告にするには、Obsoleteの最後にfalseを付与します。 } [Obsolete("このメソッドは廃止されました。代わりに'NewMethod()' を使用してください。", true)] private void ObsoleteMethod() { // エラーにするには、Obsoleteの最後にtrueを付与します。 } } [Obsolete("このクラスは廃止される予定です。代わりに'NewClass' を使用してください。", false)] class OldClass { // 警告にするには、Obsoleteの最後にfalseを付与します。 } [Obsolete("このクラスは廃止されました。代わりに'NewClass' を使用してください。", true)] class ObsoleteClass { // エラーにするには、Obsoleteの最後にtrueを付与します。 }
-
VB.NET
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' ここで警告が発生 Me.OldSub() ' ここでエラーが発生 Me.ObsoleteSub() ' ここで警告が発生 Dim old As OldClass ' ここでエラーが発生 Dim obsolete As ObsoleteClass End Sub <Obsolete("このメソッドは廃止される予定です。代わりに'NewSub()' を使用してください。", False)> _ Private Sub OldSub() ' 警告にするには、Obsoleteの最後にFalseを付与します。 End Sub <Obsolete("このメソッドは廃止されました。代わりに'NewSub()' を使用してください。", True)> _ Private Sub ObsoleteSub() ' エラーにするには、Obsoleteの最後にTrueを付与します。 End Sub End Class <Obsolete("このクラスは廃止される予定です。代わりに'NewClass' を使用してください。", False)> _ Class OldClass ' 警告にするには、Obsoleteの最後にFalseを付与します。 End Class <Obsolete("このクラスは廃止されました。代わりに'NewClass' を使用してください。", True)> _ Class ObsoleteClass ' エラーにするには、Obsoleteの最後にTrueを付与します。 End Class
コンパイルエラー・ワーニングの表示例
クラスの場合は変数宣言行やインスタンス生成行(newを行っている行)、メソッドの場合はメソッドを呼び出した行でエラーが発生します。使用している行でエラーが発生するので、プロジェクト内にObsolete属性の付与されたクラスやメソッドがあるだけではエラーになりません。サンプルコードのダウンロード
サンプルコードの実行には Microsoft Visual Studio 2008 以上のバージョンが必要です。 2008以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。検証環境
- Microsoft Visual Studio 2008 Version 9.0.30729.4462 QFE Edition: Professional
- Microsoft .NET Framework Version 3.5 SP1
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))