|
.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パラメータには、そのクラスやメンバが古いことを示すメッセージの記述は不要であり、代替方法を記述するのが一般的である。
カテゴリ:クラス・ライブラリ 処理対象:コンパイル
使用ライブラリ:DataGridコントロール
使用ライブラリ:Obsolete属性(System名前空間)
|
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間