如何使用过时的方法使编译失败

时间:2015-04-24 09:17:36

标签: c#

我想将一个方法标记为Obsolete,如果从任何地方调用它,也会导致编译失败。

我在这里找到了一个解决方案How do I mark a method as Obsolete/Deprecated?

答案表明这种语法,说布尔修饰符将达到我想要的效果(编译失败)

 [Obsolete("Method1 is deprecated, please use Method2 instead.", true)]

然而,虽然这适用于同一个项目;当从另一个项目调用该方法时它没有(我甚至有视觉工作室生产力工具显示它的错误,但编译仍然成功)

这是设计的吗?或者有解决方法吗?

1 个答案:

答案 0 :(得分:2)

如果在标记为过时的方法或类中使用标记为过时的内容,编译器将不会给您任何警告或错误。

在某些类中考虑以下过时的方法:

public class SomeClass
{
    [Obsolete("Don't use",true)]
    public static void ObsoleteMethod() { }
}

预期的行为是,无论何时使用它都会产生编译器错误。

但是如果你在另一个过时的方法中使用它,你甚至都不会收到编译器警告。

public class AnotherClass
{
    public void Method()
    {
        SomeClass.ObsoleteMethod();  // Compiler error
    }

    [Obsolete("Avoid use",false)]
    public void AnotherObsoleteMethod()
    {
        SomeClass.ObsoleteMethod(); // No error and no warning
    }
}

如果整个类被标记为过时,也是如此:

[Obsolete()]
public class ObsoleteClass
{
    public void Method()
    {
        SomeClass.ObsoleteMethod(); // No error
    }
}