0

我想创建一个具有在派生类中不同的访问修饰符,像财产的接口界面:如何实现不同的访问修饰符,当我实现

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.

如何实现的呢?

+3

您可以更改接口以仅暴露'get'。但是,界面中的任何内容默认为“public”。 – juharr

+5

你不能。界面说它必须是公开的,所以它必须是公开的。否则,如果有人“囚犯犯人=新囚犯()”,你会发生什么? prisoner.PrisonerName =“Foo”;'? –

+2

你不能。该界面需要获取和设置。唯一的选择是显式接口实现该属性。 –

回答

1

这听起来像你在接口定义的控制的时候,并且可以改变它。如果是这样的话,这是因为忽略属性定义的setter接口上,像这样简单:

public interface IPrisoner 
{ 
    string PrisonerName { get; } 
} 

这将使接口只提供一个getter。然而,当你实现这个接口,您可以自由使用任何你想要的访问修饰符,所以在你的问题,你可以实现界面如下定义二传手:

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

如果您在此处定义的setter公共(IE,省略private访问修饰符),它仍然不会使其可在IPrisoner接口,只对具体Prisoner类型的引用将其公开。您可以通过相同的方式定义仅具有setter和getter的属性。