1

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

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

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

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

“Prisoner”没有实现接口成员“IPrisoner.PrisonerName.set”。'Prisoner.PrisonerName.set' 不是公开的。

如何实施?

4

1 回答 1

2

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

public interface IPrisoner
{
    string PrisonerName { get; }
}

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

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

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

于 2017-01-23T19:42:21.543 回答