14

有没有办法使用自动属性显式实现接口?例如,考虑以下代码:

namespace AutoProperties
{
    interface IMyInterface
    {
        bool MyBoolOnlyGet { get; }
    }

    class MyClass : IMyInterface
    {
        static void Main(){}

        public bool MyBoolOnlyGet { get; private set; } // line 1
        //bool IMyInterface.MyBoolOnlyGet { get; private set; } // line 2
    }
}

此代码编译。但是,如果将第 1 行替换为第 2 行,则不会编译。

(这并不是说我需要让 2 号线工作——我只是好奇。)

4

2 回答 2

15

实际上,该语言不支持这种特定安排(通过自动实现的属性显式实现 get-only 接口属性)。所以要么手动(使用字段),要么编写一个私有的自动实现的道具,并代理它。但老实说,当你这样做的时候,你还不如使用一个字段......

private bool MyBool { get;set;}
bool IMyInterface.MyBoolOnlyGet { get {return MyBool;} }

或者:

private bool myBool;
bool IMyInterface.MyBoolOnlyGet { get {return myBool;} }
于 2010-10-11T09:37:49.847 回答
5

问题是该接口只有 getter,而您尝试使用 getter 和 setter 显式实现它。
当你显式实现一个接口时,只有当你引用接口类型时才会调用显式实现,所以......如果接口只有 getter,则无法使用 setter,所以在那里有一个 setter 是没有意义的.

例如,这将编译:

namespace AutoProperties
    {
        interface IMyInterface
        {
            bool MyBoolOnlyGet { get; set; }
        }

        class MyClass : IMyInterface
        {
            static void Main() { }

            bool IMyInterface.MyBoolOnlyGet { get; set; } 
        }
    }
于 2010-10-11T09:38:45.083 回答