使用自动属性显式实现接口

时间:2010-10-11 09:31:15

标签: c# automatic-properties

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

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行工作 - 我只是好奇。)

2 个答案:

答案 0 :(得分:15)

实际上,该语言不支持该特定安排(由自动实现的属性显式实现get-only接口属性)。所以要么手动(带字段),要么写一个私有的自动实现的prop,并代理它。但说实话,当你完成这项工作时,你可能也会使用一个领域......

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

或:

private bool myBool;
bool IMyInterface.MyBoolOnlyGet { get {return myBool;} }

答案 1 :(得分: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; } 
        }
    }