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的屬性。