过时属性仅在编译时检查吗?

发布于 2024-09-02 23:40:35 字数 155 浏览 6 评论 0原文

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

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

到目前为止没有问题,但问题是旧程序集 A 是否可以继续使用新程序集乙还是不是?谢谢

I wonder that the obsolete attribute is checked at only runtime?

Think that you have two assemblies. Assembly A uses a method from Assembly B. After that we mark the method in Assembly B as obsolete which causes a compile time error when compiling assembly A.

No problem so far but the question is whether the older assembly A continue to work with new Assembly B or not? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠檬 2024-09-09 23:40:35

这取决于你在做什么。 [Obsolete] 属性主要在编译时使用,但请注意,运行时的某些部分在存在时具有不同的行为(见下文)。它可能会导致问题,甚至对于未重建的现有代码也是如此,因此我们必须得出结论:[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 也是一个运行时 - 不是编译器的一部分)

It depends on what you are doing. The [Obsolete] attribute is primarily for use at compile-time, but be aware that some parts of the runtime have different behavior when it is present (see below). It might cause problems, even to existing code that is not rebuilt, so we must conclude that NO, [Obsolete] is not checked only at compile time.

For example, the code below will write Foo but not 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 is a runtime too - not part of the compiler)

可爱咩 2024-09-09 23:40:35

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

当此方法保留在引用的程序集中时,没有什么可以阻止您使用此方法。 Obsolete 属性是库开发人员的一种方式,可以让库的用户知道他们应该寻求使用不同的方法来实现他们的需求。

回答你的问题,是的,旧的程序集 A 将继续与新的程序集 B 一起使用。(前提是程序集版本保持不变)

Building an assembly that uses a method from another assembly which is marked as Obsolete causes a compile time warning (Unless you have 'display warnings as errors' enabled).

There is nothing stopping you using this method while ever it remains in the referenced assembly. The Obsolete attribute is there as a way for library developers to let the people who use the library know that they should be looking to use a different method to achieve what they need.

To answer your question, yes, an older assembly A will continue to work with a new assembly B. (providing the assembly version remains the same)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文