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

本文关键字:bool 属性 string NET Obsolete 用于 | 更新日期: 2023-09-27 18:35:42

注意:我已经检查了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
   }
}

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

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

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

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

该属性只是编译器的指令。现有的二进制文件仍然可以使用该构造函数。

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

这只会在编译时由编译器使用。 它不会影响已部署的应用程序。

因此,这将具有您尝试完成的行为。

这是[过时]已经做的事情,不需要额外的帮助。 它不是编译时警告,它会生成错误:

错误 CS0619:"控制台应用程序 1.MyClass.MyClass()" 已过时: "此构造函数已过时,请使用其他构造函数。"