是否可以在公开获取getter的同时明确实现属性设置器?

时间:2013-05-14 19:39:37

标签: c# properties language-features explicit-implementation

当我定义包含只写属性的接口时:

public interface IModuleScreenData
{
    string Name { set; }
}

并试图(天真地)明确地实施它,并希望该财产也有一个公开可用的吸气剂:

public class ModuleScreen : IModuleScreenData
{
    string IModuleScreenData.Name { get; set; }
}

然后我收到以下错误:

  

错误'IModuleScreenData.Name.get'添加了一个未找到的访问者   接口成员'IModuleScreenData.Name'

但是,在使用这种替代语法之后,或多或少会出现错误:

public class ModuleScreen : IModuleScreenData
{
    public string Name { get; IModuleScreenData.set; }
}

无法编译,我想我想做的事情真的不可能。我是对的,还是有一些秘密的 sauce 语法?

2 个答案:

答案 0 :(得分:11)

你可以这样做:

public class ModuleScreen : IModuleScreenData
{
    string IModuleScreenData.Name
    {
        set { Name = value; }
    }

    public string Name { get; private set; }
}

另一方面,我通常不建议使用仅设置属性。一种方法可以更好地表达意图。

答案 1 :(得分:-1)

您无法更改继承类中接口的实现方式。这就是重点..如果你需要对一个属性做一些新的事情,你可以创建一个引用继承的属性特定实现的新属性。接口在那里,因此您可以符合指定的对象继承标准。

更新: 第二个想法..你应该能够做到这一点....这将编译好:

public class ModuleScreen : IModuleScreenData
    {
        public string Name { get; set; }
    }