- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在删除一些过时的代码时,我遇到了一个意想不到的场景,重现如下:
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。
如果 Bob 在他的代码中调用 HardDeprecatedMethod
,他应该会得到一个编译时错误;他会的。
您预计,如果 Bob 在任何地方调用了 SoftDeprecatedMethod
,从现在开始,他应该被警告,但他的代码应该仍然有效;它会的。
所以你得到你想要的!
关于c# - 使用 [Obsolete] 属性的弃用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573450/
如果我使用教程中提供的代码,我会收到以下警告: Warning CS0618: 'FirebaseInstanceIdService' is obsolete: 'This class is obso
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我想知道过时的属性是否只在运行时检查? 假设您有两个程序集。程序集 A 使用程序集 B 中的方法。之后我们将程序集 B 中的方法标记为过时,这会在编译程序集 A 时导致编译时错误。 到目前为止没有问题
我最近听说在我们的代码中使用 [Obsolete] 属性标记许多方法是不好的做法。这些方法在我们的代码库内部,而不是在 API 上。这些方法处理较旧的加密功能。 我觉得这是一种快速而安全的方式,可以向
我目前正在重命名我的团队正在生产的产品(对变量、服务接口(interface)、类名等进行适当的重构)。对于本练习的 RPM 重命名部分,我被告知使用 obsoletes 标记。我现在处于错误修复阶段
我有一个函数,只能由开发人员在特殊情况下使用。 不幸的是,设置 public/private 并没有真正的帮助,因为在许多情况下它需要可见才能使用。 我已经用 xmldocs 记录了这个函数来给开发者
当使用 com.android.tools.build:gradle:3.3.0-beta01 时,gradle 失败: ERROR: API 'variant.getExternalNativeBu
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
这是 Visual Studio 2008。显然与扩展的静态类有关。 public class Dummy { public readonly int x; public Dummy(
我是 HTML 5 的新手,我有问题要在各种 W3 HTML 标准化文档中找出来获取属性的状态。 例如,bgcolor 的属性自 HTML 4.01 起不应再使用元素。它已被弃用。 (参见:http
在删除一些过时的代码时,我遇到了一个意想不到的场景,重现如下: class Program { static void Main(string[] args) { Vi
当尝试使用 ExpectedConditions 显式等待元素变得可见时,Visual Studio 警告我它现在已经过时,很快就会从 Selenium 中删除。 实现相同结果的当前/新方法是什么?
首先,我期待 --no-obsolete会注释掉 msgid和 msgstr如果 gettext被删除了吧 我的测试方式是: 我写了 gettext("some string here")在查看 我跑
它如何知道这把 key 已经旧了并准备扔掉?为什么是字符串文字? 例如, private static WeakHashMap, String> m =
很久以前,我做了一个小项目,希望能了解温莎城堡。我把它放在一边(在真正学到那么多之前)很长一段时间。我现在再次打开它,并更新了 NuGet 包,并开始收到警告 CS0618: 'LoggingFaci
这个问题在这里已经有了答案: The Difference Between Deprecated, Depreciated and Obsolete [closed] (8 个答案) 关闭 7 年前
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
经过深思熟虑并研究 ArrayList 的实现,我个人真的很想说它已经过时了,我没有理由在2.0之后使用这个类。但是因为它没有标记为 [Obsolete] ,有什么我不知道的用法,比使用泛型类更好吗?
我正在重构一个相当大的 JS 文件,其中包含许多不相关的方法,将它们根据用途重新组合在一起,并根据需要重命名其中一些方法(以防止误导名称)。 然而,大多数实际使用这段代码的网页都分布在不同的代码分支中
我是一名优秀的程序员,十分优秀!