[Obsolete]
的功能主要是停止使用类/函数,但仍然将其保存在记录的代码中。
是否有任何充分的理由可以使用[Obsolete]
而不是仅删除或注释掉代码。如果你有源代码控制这个问题就更有意义,所以没有必要保留代码以供参考,因为它将在SC中。
我很好奇什么是最佳做法?
答案 0 :(得分:4)
它主要用于向后兼容,因此当您执行具有不同预期行为的功能的新实现时,使用旧功能的任何代码仍然有效,但您确保库的新用途使用新的实现。
如果您要维护第三方正在使用的库,则应制定路径图,以及何时将删除过时的功能。如果它很重要,因为很多时候你只是表明不再需要维护该功能而应该使用新功能。
在内部,它可以用于重构,以逐步的方式替换实现不佳但工作正常的功能。您将其标记为已过时并开始处理警告,直到您不再看到它们为止,然后您可以继续安全删除它。
请注意,这是基于更新遗留代码库的经验而产生的意见,并且没有共识。
答案 1 :(得分:1)
Obsolete
属性将程序实体标记为不再推荐使用的程序实体。标记为过时的实体的每次使用都将随后生成警告或错误,具体取决于属性的配置方式。
以下是来自参考源的Hashtable
比较器的示例。
[Obsolete("Please use KeyComparer properties.")]
protected IComparer comparer
{
get
{
if( _keycomparer is CompatibleComparer) {
return ((CompatibleComparer)_keycomparer).Comparer;
}
else if( _keycomparer == null) {
return null;
}
else {
throw new ArgumentException(Environment.GetResourceString("Arg_CannotMixComparisonInfrastructure"));
}
}
set
{
if (_keycomparer is CompatibleComparer) {
CompatibleComparer keyComparer = (CompatibleComparer)_keycomparer;
_keycomparer = new CompatibleComparer(value, keyComparer.HashCodeProvider);
}
else if( _keycomparer == null) {
_keycomparer = new CompatibleComparer(value, (IHashCodeProvider)null);
}
else {
throw new ArgumentException(Environment.GetResourceString("Arg_CannotMixComparisonInfrastructure"));
}
}
}
答案 2 :(得分:-1)
ObsoleteAttribute的文档描述了它存在的原因......
将元素标记为过时通知用户在将来的产品版本中将删除该元素。
正如评论中所提到的,如果其他人使用你的程序集版本,这显然是非常有用的。