9

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

public interface IModuleScreenData
{
    string Name { set; }
}

并尝试(天真地)明确地实现它,以使该属性也具有公开可用的 getter:

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

然后我收到以下错误:

错误“IModuleScreenData.Name.get”添加了在接口成员“IModuleScreenData.Name”中找不到的访问器

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

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

编译失败,我想我想做的事情是不可能的。我是对的,还是毕竟有一些秘密的语法

4

2 回答 2

11

你可以这样做:

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

    public string Name { get; private set; }
}

附带说明一下,我通常不推荐仅设置属性。一种方法可能更好地表达意图。

于 2013-05-14T20:01:49.937 回答
-2

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

更新:再想一想..你应该可以这样做....这将编译得很好:

public class ModuleScreen : IModuleScreenData
    {
        public string Name { get; set; }
    }
于 2013-05-14T19:46:06.730 回答