この例を考えてみましょう
public interface IAnimal
{
[Obsolete("Animals can't eat anymore", true)]
void Eat();
}
public class Animal : IAnimal
{
public void Eat()
{
Console.WriteLine("Hello");
}
}
廃止されたメソッドを持つインターフェイス IAnimal があります。クラス Animal はそのインターフェースを実装します。
後で、 Eat メソッドを次のように呼び出します。
var animal = new Animal();
animal.Eat();
コンパイラはコンパイルに失敗しません (警告の代わりにエラーを出すように Obsolete をマークしています)。プログラムはコンパイルされ、メソッドもエラーなしで呼び出されます。
私が見る限り、これはコンパイラのバグです。私は何か不足していますか?
注:私はVS2010を使用しています