考虑这种情况:

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
    }
}

哪个不编译:



将属性专门应用于访问器对于其他任何属性都是完美的(前提是AttributeTargets.Method的用法已设置,对于ObsoleteAttribute而言是正确的)。

最佳答案

显然,这是编译器明确禁止其使用,这并非偶然。嗯,为什么?在编译器中进行限制的变通办法似乎不太可能。我猜他们决定禁止这样做,以免引起警告的程序员感到困惑。除非该消息经过精心设计,否则会混淆,根据属性的使用情况,该消息会不一致地显示。

09-30 15:45
查看更多