繁体   English   中英

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

[英]Explicit implementation of an interface using an automatic property

有什么方法可以使用自动属性来显式实现接口吗? 例如,考虑以下代码:

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

实际上,该语言不支持这种特定的安排(通过自动实现的属性明确实现仅获取接口的属性)。 因此, 要么手动(带有字段)执行,要么编写一个私有的自动实现的道具,然后代理它。 但老实说,当您完成操作时,您可能已经使用了一个字段...

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

要么:

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

问题在于该接口只有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; } 
        }
    }

暂无
暂无

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

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