c# - 用于 .NET 的 [Obsolete(string, bool)] 属性

标签 c# .net methods attributes obsolete

注意:我已经检查了 msdn,它没有解决我的实际问题,请参见下文。

我正在尝试在我的一个类中的(显然已过时的)构造函数上使用过时的属性。场景如下:

我希望能够强制开发人员更新到新的构造函数而不影响已经存在和部署的代码。这样我就可以很好地将我的代码部署到生产环境中,但是从开发人员的角度来看,每当他们进入他们的代码时,我希望他们得到一个我确信他们会忽略的“警告”,而不是仅仅得到一个编译错误,因为现状已经不行了。

所以我的问题是,这是否只会影响开发人员或所有调用应用程序,还是我的整个问题都错了?

示例代码:

public class MyClass
{
   private string _userID; //new code

   [Obsolete("This constructor is obsolete, please use other constructor.", true)]
   public MyClass()
   {
      _userID = ""; //defaulting to empty string for all those using this constructor
   }

   public MyClass(string userID)
   {
      _userID = userID; //this is why they need to use this constructor
   }
}

任何和所有帮助将不胜感激,提前致谢!

最佳答案

是的,这主要影响编译器 - 任何预构建代码都不会受到影响...除非该代码显式检查此属性。例如,某些序列化代码(XmlSerializer、IIRC)会对此进行检查 - 因此它可能不会完全没有副作用......但原则上现有代码不会通常会受到影响,直到他们接下来尝试编译。

当然,如果您从使用动态编译的东西(例如没有预编译的 ASP.NET)中使用此代码,那么所有赌注都关闭了

关于c# - 用于 .NET 的 [Obsolete(string, bool)] 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821283/

相关文章:

带有 throw(...) 的 C++ 方法声明

c# - 我们可以在服务总线主题触发器 Azure Function 中使用 Polly 重试而不是 ExponentialBackoffRetry 吗?

c# - 将目标框架从 v4.0 更改为 v3.5 后找不到命名空间

c# - ldstr 是否在内部实现了 newobj?

.net - 如何覆盖 ASP.NET Web 应用程序当前区域性的货币格式?

iphone - 如何从iOS中的另一个类调用方法?

go - 使用嵌入式别名在不同包中的结构上定义方法是否有效?

c# - 如何使用 ItemArray 将 Null 值插入 DataTable

c# - 使用 Linq 抛出异常

c# - Close() 后的 SqlConnection.ServerVersion 异常