如何在实现接口时实现不同的可访问性修饰符

How to implement different accessibility modifiers when I implement the interface

我想用 属性 创建一个界面,它在派生的 类 中有不同的可访问性修饰符,例如:

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

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

但在这种情况下我得到一个错误:

'Prisoner' does not implement interface member 'IPrisoner.PrisonerName.set'. 'Prisoner.PrisonerName.set' is not public.

如何实现?

听起来您可以控制接口定义,并且可以更改它。如果是这样的话,就像在接口上的 属性 定义中省略 setter 一样简单,就像这样:

public interface IPrisoner
{
    string PrisonerName { get; }
}

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

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

如果您将此处的 setter 定义为 public(IE,省略 private 访问修饰符),它仍然无法通过 IPrisoner接口,只有对具体 Prisoner 类型的引用才会公开它。您可以以相同的方式在接口上定义只有 setter 而没有 getter 的属性。