繁体   English   中英

ObsoleteAttribute如何以及为何不允许使用属性访问器?

[英]How and why is ObsoleteAttribute disallowed for property accessors?

考虑这种情况:

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也是如此)。

显然,编译器明确禁止其使用,这不是偶然的。 Hmya,为什么? 编译器中限制的解决方法似乎不太可能。 我猜他们决定禁止它以避免混淆程序员获得警告。 除非信息精心制作,否则会出现不一致的情况,这取决于属性的使用情况。

在这种情况下,如果你要使它过时,你不会只是不包括它吗? 过时的旗帜的意思是说有一种不同的(更好的做事方式)。

在这种情况下,您可能希望将更改作为重大更改并强制用户更新代码。

为什么不修改属性以使用ModifyFoo的代码?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM