实现接口

时间:2017-01-23 18:21:24

标签: c# inheritance interface access-modifiers interface-implementation

我想创建一个带有属性的接口,该属性在派生类中具有不同的可访问性修饰符,例如:

public interface IPrisoner
{
    string PrisonerName { get; set; }
}

public class Prisoner : IPrisoner
{
    public string PrisonerName { get; private set; }
}

但在这种情况下我收到错误:

  

'犯人'没有实现接口成员   ' IPrisoner.PrisonerName.set&#39 ;. ' Prisoner.PrisonerName.set'不是   公共

如何实施?

1 个答案:

答案 0 :(得分:1)

听起来您已经控制了界面定义,并且可以对其进行更改。如果是这种情况,那就像从界面上的属性定义中省略setter一样简单,如下所示:

public interface IPrisoner
{
    string PrisonerName { get; }
}

这将使界面仅提供一个getter。但是,当您实现界面时,您可以使用您想要的任何访问修饰符自由定义setter,因此在您的问题中,您可以按如下方式实现界面:

public class Prisoner : IPrisoner
{
    public string PrisonerName { get; private set; }
}

如果你在这里将setter定义为public(IE,省略private访问修饰符),它仍然不能通过IPrisoner接口使其可用,只引用具体{ {1}}类型将公开它。您可以以相同的方式定义只有setter且没有getter的属性。