可能重复:
如何将方法标记为已过时/已弃用?- C#
你如何将一个类标记为已弃用?我不想在我的项目中再使用一个类,但不想在2周之前删除它.
我想隐藏intellisense成员列表中的公共方法.我创建了一个属性,当应用于方法时,将导致在构造对象时调用该方法.我这样做是为了更好地支持部分课程.问题是在某些环境(例如Silverlight)中,反射无法访问私有成员,甚至是子类的私有成员.这是一个问题,因为所有工作都是在基类中完成的.我必须将这些方法设为公开,但我希望它们不受intellisense的影响,类似于Obsolete属性的工作原理.坦率地说,因为我是关于对象封装的肛门.我尝试了不同的东西,但实际上没有任何效果.该方法仍显示在成员下拉列表中.
当我不希望客户端调用公共方法时,如何防止公共方法出现在intellisense中?对于一个真正的问题,非利士人怎么样!这也适用于必须公开的MEF属性,但有时您希望将它们从客户端隐藏.
更新: 自从发布此问题以来,我已成熟为开发人员.为什么我如此关心隐藏界面是在我之外.
我经常遇到一种情况,我想阻止其他开发人员继续使用方法或类.例如,假设我有两个库方法"A"和"B",其中"A"是执行某项任务的"旧"方式,"B"是执行该任务的"新"方式.在许多情况下,A和B完全不同,使用A来重构代码开始使用B非平凡(例如需要流过附加状态).由于A适用于使用它的情况,我不想优先考虑重构.但是,我确实希望给我的开发人员一个直观的指示,即A不会在新代码中使用.
因此,我理想地喜欢在引用具有ObsoleteAttributeWITHOUT相关编译器警告/错误的成员时获得的删除(因为启用它会从A的所有旧用途中发出数百个错误,我们不打算随时解决).这样,如果开发人员用A编写新的代码行,他或她将立即注意到删除并修复代码以使用B.
有没有办法在VisualStudio(2012)中获得此类功能?
编辑:
对"无法区分新旧代码"的效果有几点评论.我同意.但是,这不是我要求的,所以让我澄清一下:相反,我想要的是代码"过时"(例如删除线)的直观表示,没有相应的编译器警告或错误.这样,开发人员在阅读旧代码或编写新代码的过程中,会立即看到某些内容已过时.即使.NET本身不支持这种情况,也许为此目的有一个VS扩展吗?
对于"你不能既有警告也没有警告"的效果,有几条评论.我以为我解释了上面的用例,但我会再试一次.我们有一组核心库,在构成我们代码库的各种解决方案中大量使用.有时,我会对其中一个库进行更新,这些库提供了一个新的,更好的API来执行某些任务.为了保持向后兼容性,我不能只删除执行该任务的旧方法(在许多情况下),因为大量现有代码依赖于使用旧的API集,并且不能轻易地重构以使用新的API.此外,没有迫切的理由这样做; 它只会冒险将bug引入现有代码.但是,我想通过某种方式在视觉上提醒开发人员注意某些API应该避免使用其他API.这很困难,因为开发人员倾向于通过阅读完成相同任务的现有代码来学习如何完成某项任务.这使得新的API难以传播,因为旧的根深蒂固的API被如此多的现有代码引用.在ObsoleteAttribute通过编译器警告实现这一点,但这些警告将刚刚从数百旧的API的现有用途的创建吨的噪音.这就是我喜欢删除线的原因:它是非常直观的,但只有在开发人员阅读或编写使用过时API的代码时才会干扰开发人员.以下是我想标记旧API的一些更改示例:
作为进一步的说明,我认为这个问题的答案很好地描述了为什么你可能不会标记过时的东西,即使你不建议在新代码中使用它.
有几条评论/答案只是简单地说出了存在ObsoleteAttribute.请注意,此问题的文本始终引用该属性.
我创建了一些支持取消的WebRequest 扩展方法.是否可以将相关的.net框架方法标记为已过时.这将允许其他开发人员获得警告并鼓励他们使用新的扩展方法.
这个问题与我用[System.Obsolete]标记的方法无关.我想忽略的方法是在一个我无法控制的DLL中.
我使用第三方库,其中包含对象的扩展方法.这会导致混淆,并可能在将来引起问题.有没有办法将此扩展方法(或来自某个dll的所有扩展方法)标记为外部过时或阻止此扩展方法出现在intellisense中.有问题的方法是:
public static class ExtensionMethods
{
public static bool IsNumeric(this object obj)
{
if (obj == null)
return false;
return obj.GetType().IsPrimitive || obj is double || (obj is Decimal || obj is DateTime) || obj is TimeSpan;
}
}
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×4
vb.net ×2
asp.net ×1
deprecated ×1
dll ×1
intellisense ×1
methods ×1
obsolete ×1
oop ×1
reflection ×1