我想创建一个带有属性的接口,该属性在派生类中具有不同的可访问性修饰符,例如:
public interface IPrisoner
{
string PrisonerName { get; set; }
}
public class Prisoner : IPrisoner
{
public string PrisonerName { get; private set; }
}
但在这种情况下我收到错误:
'犯人'没有实现接口成员 ' IPrisoner.PrisonerName.set&#39 ;. ' Prisoner.PrisonerName.set'不是 公共
如何实施?
答案 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的属性。