首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于.NET的[Obsolete(string,bool)]属性

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

Stack Overflow用户
提问于 2012-05-31 01:30:13
回答 4查看 955关注 0票数 9

注意:我已经检查了msdn,它没有解决我的实际问题,见下文。

我正尝试在我的一个类中的一个构造函数(显然是过时的)上使用过时属性。以下是场景:

我希望能够强制开发人员更新到新的构造函数,而不影响现有的和已部署的代码。通过这种方式,我可以很好地将我的代码部署到生产环境中,但从开发人员的角度来看,无论他们何时进入他们的代码,我都希望他们得到一个编译错误,因为现状已经不再那么好了。

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

示例代码:

代码语言:javascript
运行
复制
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
   }
}

任何帮助都将不胜感激,提前谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-31 01:37:23

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

当然,如果您使用的代码来自使用动态编译的代码(例如,没有预编译的ASP.NET ),那么所有的赌注都离不开

票数 11
EN

Stack Overflow用户

发布于 2012-05-31 01:36:36

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

票数 3
EN

Stack Overflow用户

发布于 2012-05-31 01:36:43

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

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

因此,这将具有您试图实现的行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10821283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档