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

时间:2012-05-30 17:30:13

标签: 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
   }
}

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

4 个答案:

答案 0 :(得分:11)

是的,这主要影响编译器 - 任何预先构建的代码都不会受到影响... 除非该代码明确检查此属性。例如,某些序列化代码(XmlSerializer,IIRC)会对此进行检查 - 因此它可能不是完全无副作用... 但是在现有代码中赢得了&#39 ; t通常会受到影响,直到他们下次尝试编译。

当然,如果您使用的是使用动态编译的代码(例如没有预编译的ASP.NET),那么所有投注都将关闭

答案 1 :(得分:3)

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

答案 2 :(得分:2)

  

所以我的问题是,这会影响开发人员或所有调用应用程序,还是我完全错了?

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

因此,这将有你想要完成的行为。

答案 3 :(得分:2)

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

  

错误CS0619:'ConsoleApplication1.MyClass.MyClass()'已过时:   '这个构造函数已经过时了,请使用其他构造函数。'