是否仅在编译时检查过时属性?

时间:2010-05-28 12:11:44

标签: c# .net attributes obsolete

我想知道只在运行时检查过时的属性?

认为你有两个组件。程序集A使用程序集B中的方法。之后,我们将程序集B中的方法标记为过时,这会在编译程序集A时导致编译时错误。

到目前为止没有问题,但问题是旧组件A是否继续使用新的组件B?感谢

2 个答案:

答案 0 :(得分:14)

这取决于你在做什么。 [Obsolete]属性主要在编译时使用,但请注意,运行时的某些部分在存在时会有不同的行为(请参阅下文)。 可能导致问题,甚至是现有的未重建的代码,因此我们必须得出结论 NO [Obsolete]不会仅在编译时检查。

例如,下面的代码会写Foo但不会写Bar

using System;
using System.Xml.Serialization;
public class Data
{
    public int Foo { get; set; }
    [Obsolete] public int Bar {get;set;}

    static void Main()
    {
        var data = new Data { Foo = 1, Bar = 2 };
        new XmlSerializer(data.GetType()).Serialize(Console.Out, data);
    }
}

XmlSerializer也是运行时 - 不是编译器的一部分)

答案 1 :(得分:6)

构建使用另一个程序集中标记为Obsolete的方法的程序集会导致编译时警告(除非您启用了“显示警告错误”)。

没有什么可以阻止你使用这种方法,而它仍然在引用的程序集中。作为一种方式,库开发人员可以让使用库的人知道他们应该使用不同的方法来实现他们需要的东西。

要回答您的问题,是的,较旧的装配件A将继续使用新装配件B.(提供装配件版本保持不变)