我想标记一个方法/类......已过时,但仅在特定日期之后。例如,这个类将在 6 个月内过时,让其他开发人员有时间实现新架构。
C# 中是否存在这样做的属性?还是我应该实施自己的?
所有项目都将警告视为错误,因此 ObsoleteAttribute 不回答这个问题。
我想标记一个方法/类......已过时,但仅在特定日期之后。例如,这个类将在 6 个月内过时,让其他开发人员有时间实现新架构。
C# 中是否存在这样做的属性?还是我应该实施自己的?
所有项目都将警告视为错误,因此 ObsoleteAttribute 不回答这个问题。
您通常不会将这些信息烘焙到代码中,而是发布开发路线图,其中包含将要发生的任何重大更改。已弃用的功能不一定是重大更改。
即使您为 IDE 编写一种机制来使用这种“延迟弃用”,其他开发人员也需要这个 VS 扩展才能使用它。
只需发布一个文档,说明将被弃用/破坏的内容,然后在时机成熟时使用属性弃用它。
“将警告视为错误”只会在弃用时影响您,但这意味着您在从旧代码迁移到新代码时保持警惕。当然,如果您需要提供向后兼容性,您要么需要停止将警告视为错误(以便让代码使用已弃用的代码作为支持),要么在弃用时抑制警告,但这可能会有点混乱.
没有对延迟弃用的内置支持,而且我不知道有任何第三方解决方案在野外 - 所以现在你只能靠自己了。
如果你以这样的方式开始你的方法呢?
void method()
{
if(System.Diagnostics.Debugger.IsAttached) // you want your application to work, but warn developers
{
string DeprecatedFrom = "20001231"; //example date: 31 dec 2000
if (string.Format("{0:yyyymmdd}",DateTime.Now).Equals(DeprecatedFrom)) throw new NotSupportedException("Don't use this method.");
}
}
Crude, but effective: method will start throwing when 31 dec 2000 (in the example) is reached.