注意:我已经检查了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
}
}
任何和所有的帮助将不胜感激,提前谢谢!
答案 0 :(得分:11)
是的,这主要影响编译器 - 任何预先构建的代码都不会受到影响... 除非该代码明确检查此属性。例如,某些序列化代码(XmlSerializer,IIRC)会对此进行检查 - 因此它可能不是完全无副作用... 但是在现有代码中赢得了&#39 ; t通常会受到影响,直到他们下次尝试编译。
当然,如果您使用的是使用动态编译的代码(例如没有预编译的ASP.NET),那么所有投注都将关闭。
答案 1 :(得分:3)
该属性只是编译器的指令。已有的二进制文件仍然可以使用构造函数。
答案 2 :(得分:2)
所以我的问题是,这会影响开发人员或所有调用应用程序,还是我完全错了?
这只能在编译时在编译时使用。它不会影响已部署的应用程序。
因此,这将有你想要完成的行为。
答案 3 :(得分:2)
这是[已废除]已经做的,不需要额外的帮助。它不是编译时警告,它会生成错误:
错误CS0619:'ConsoleApplication1.MyClass.MyClass()'已过时: '这个构造函数已经过时了,请使用其他构造函数。'