C# · 12月 26, 2021

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

注意:我已经检查过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,无需预编译),则所有投注都将关闭.