考虑这种情况:
public class C
{
private int _foo;
public int Foo
{
get { return _foo; }
[Obsolete("Modifying Foo through the setter may corrupt hash tables. "
+ "Consider using the method 'ModifyFoo' instead.")]
set { _foo = value; }
}
public C ModifyFoo( int foo )
{
// return a new instance of C
}
}
哪个不编译:
错误CS1667:属性“过时”在属性或事件访问器上无效。它仅对'class,struct,enum,constructor,method,property,indexer,field,event,interface,delegate'声明有效。
将属性专门应用于访问者对于任何其他属性都是完全正确的(前提是AttributeTargets.Method
在其用法中设置,ObsoleteAttribute
}也是如此。
答案 0 :(得分:7)
显然,编译器明确禁止其使用,这不是偶然的。 Hmya,为什么?编译器中限制的解决方法似乎不太可能。我猜他们决定禁止它以避免混淆程序员获得警告。除非邮件制作精良,否则会出现不一致的情况,这取决于属性的用途。
答案 1 :(得分:1)
在这种情况下,如果你要使它过时,你不会只是不包括它吗?过时的旗帜的意思是说有一种不同的(更好的做事方式)。
在这种情况下,您可能希望将更改作为重大更改并强制用户更新代码。
答案 2 :(得分:1)
为什么不修改属性以使用ModifyFoo
中的代码?