gpt4 book ai didi

c# - 使用 [Obsolete] 属性的弃用行为

转载 作者:IT王子 更新时间:2023-10-29 04:28:05 27 4
gpt4 key购买 nike

在删除一些过时的代码时,我遇到了一个意想不到的场景,重现如下:

class Program
{
static void Main(string[] args)
{
ViableMethod();
Console.WriteLine("");
SoftDeprecatedMethod();//Compiler warning

//HardDeprecatedMethod();//Can't call that from here, compiler error

Console.ReadKey(true);
}

public static void ViableMethod ()
{
Console.WriteLine("ViableMethod, calls SoftDeprecatedMethod");
SoftDeprecatedMethod();//Compiler warning
//HardDeprecatedMethod();//Can't call that from here, compiler error
}

[Obsolete("soft", false)]
public static void SoftDeprecatedMethod()
{
Console.WriteLine("SoftDeprecatedMethod, calls HardDeprecatedMethod");
HardDeprecatedMethod();
}

[Obsolete("hard", true)]
public static void HardDeprecatedMethod()
{
Console.WriteLine("HardDeprecatedMethod");
}
}

根据输出,似乎已弃用并带有警告的函数可以调用已弃用并出现错误的函数,并且代码将执行。

我的预期是我会看到一个编译器错误,提示不允许从 SoftDeprecatedMethod() 调用 HardDeprecatedMethod()。观察到的行为对我来说似乎很奇怪。

有谁知道这是否是所需的行为(如果是,为什么),或者这可能是 [Obsolete] 属性实现中的缺陷?

最佳答案

事实上恰恰相反:它表明 C# 编译器非常聪明,并且非常清楚地使用标记为 Obsolete 的方法。

假设您将此代码作为类库中的公共(public) API 提供给 Bob。

  1. 如果 Bob 在他的代码中调用 HardDeprecatedMethod,他应该会得到一个编译时错误;他会的。

  2. 您预计,如果 Bob 在任何地方调用了 SoftDeprecatedMethod,从现在开始,他应该被警告,但他的代码应该仍然有效;它会的。

所以你得到你想要的!

关于c# - 使用 [Obsolete] 属性的弃用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573450/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com