.NET TIPS

不要となった古いクラスやメソッドを残すには?

デジタルアドバンテージ 遠藤 孝信
2005/12/02

 クラス・ライブラリを作成し、その後それを更改するとき、すでに利用されているという理由で既存のクラスやメソッドには手を加えず、新規にクラスやメソッドを追加したい場合がある。

 このような場合、既存のクラスやメソッドにObsolete属性(System名前空間)を付けておけば、それ以降の開発でそれらを利用したコードを作成させないようにすることが可能だ。Obsolete属性を使うと、それが付けられたクラスやメソッドを使用したコードのコンパイル(あるいはビルド)で警告を出したり、コンパイルをエラーにしたりできる。ちなみにObsoleteとは「時代遅れの」「陳腐化した」といった意味である。

Obsolete属性の記述方法

 Obsolete属性は、クラスやメソッド、プロパティなどのメンバに付加することができる。属性の第1パラメータにはコンパイル時に出力されるメッセージを指定できる。また、第2パラメータにtrueを指定すれば、コンパイルはエラーとなる。以下にその記述例を示す。

// obsolete.cs

using System;

public class MyUsefulClass {

  [Obsolete("MyNewMethodを使用してください")]
  public void MyMethod() {
    // 元のメソッド
  }

  public void MyNewMethod() {
    // 新しいメソッド
  }
}

[Obsolete("別のクラスを使用してください", true)]
public class MyGodClass {
  // もはや使えないクラス
}

public class Test {

  static void Main() {

    MyUsefulClass mc = new MyUsefulClass();
    mc.MyMethod();
    mc.MyNewMethod();

    MyGodClass mgc;
    System.Net.Sockets.TcpListener tcp
      = new System.Net.Sockets.TcpListener(80);
  }
}

// コンパイル方法:csc obsolete.cs
Obsolete属性を使用したC#のサンプル・プログラム(obsolete.cs)
 
' obsolete.vb

Imports System

Public Class MyUsefulClass
  <Obsolete("MyNewMethodを使用してください")> _
  Public Sub MyMethod()
    ' 元のメソッド
  End Sub

  Public Sub MyNewMethod()
    ' 新しいメソッド
  End Sub
End Class

<Obsolete("別のクラスを使用してください", True)> _
Public Class MyGodClass
  ' もはや使えないクラス
End Class

Public Class Test
  Shared Sub Main()
    Dim mc As New MyUsefulClass()
    mc.MyMethod()
    mc.MyNewMethod()

    Dim mgc As MyGodClass

    Dim tcp As New System.Net.Sockets.TcpListener(80)
  End Sub
End Class

' コンパイル方法:vbc /r:System.dll obsolete.vb
Obsolete属性を使用したVB.NETのサンプル・プログラム(obsolete.vb)

 各サンプル・プログラムの最後で利用しているTcpListenerクラスのint型のパラメータを取るコンストラクタは、実際に.NET Framework 1.1でObsolete属性が指定されているメソッドだ。

 上記のコードをVisual Studio .NET 2003でビルドした場合、[出力]ウィンドウには以下のような警告およびエラーが表示される。

Obsolete属性により出力されたコンパイル時の警告およびエラー(上:C#、下:VB.NET)

 この出力内容のうち「〜は古い形式です」「〜は旧形式です」といったメッセージは、コンパイラにより自動的に表示されるメッセージである。このためObsolete属性の第1パラメータには、そのクラスやメンバが古いことを示すメッセージの記述は不要であり、代替方法を記述するのが一般的である。End of Article

カテゴリ:クラス・ライブラリ 処理対象:コンパイル
使用ライブラリ:DataGridコントロール
使用ライブラリ:Obsolete属性(System名前空間)

この記事と関連性の高い別の.NET TIPS
プログラムからソース・コードをコンパイルするには?
[ASP.NET]ページから生成されたソース・コードを見るには?
プログラムからソース・コードをコンパイルして実行するには?
C#のソース・コードを実行するには? - VS.NET
メソッドやプロパティの有無を確認して呼び出すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間