注意:我已经检查了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
}
}任何帮助都将不胜感激,提前谢谢!
发布于 2012-05-31 01:37:23
是的,这主要影响编译器-任何预先构建的代码都不会受到影响……除非该代码显式检查此属性。例如,一些序列化代码(XmlSerializer,IIRC)对此进行了检查-因此它可能不是完全没有副作用的……但在原则上,现有的代码通常不会受到影响,直到他们尝试编译下一步。
当然,如果您使用的代码来自使用动态编译的代码(例如,没有预编译的ASP.NET ),那么所有的赌注都离不开。
发布于 2012-05-31 01:36:36
该属性只是编译器的一条指令。已经存在的二进制文件仍然可以使用构造函数。
发布于 2012-05-31 01:36:43
所以我的问题是,这只会影响开发人员,还是会影响所有调用的应用程序,还是我整个事情都错了?
这将只在编译时由编译器使用。它不会影响已经部署的应用程序。
因此,这将具有您试图实现的行为。
https://stackoverflow.com/questions/10821283
复制相似问题