2014-05-20 77 views
0
internal interface ICommand 
{ 
    // some methods... 
} 

public interface IProject 
{ 
    // some other methods... 

    ICommand Command { get; set; } 
} 

我覺得這很清楚。由於可訪問性,編譯器不允許這樣做。有什麼辦法可以做到嗎?或者我應該改變結構?內部接口在公共接口中的實現

+0

你爲什麼想這樣做?如果你幫助我們理解用例,我們可能會爲你提供更好的替代方案。 – jgauffin

+0

@jgauffin他只是想這樣! –

+0

@ToanNguyen看起來你今天服用了調皮丸 – jgauffin

回答

0

接口的所有成員必須與接口本身具有相同的可訪問性或較少的限制性。所以你不能在公共界面中使用內部類型。

但是你可以做的是有一個派生的接口比它的父親更具限制性,派生接口可以包含內部成員。

internal interface ICommand 
{ 
    // some methods... 
} 

public interface IProject 
{ 
    // some other methods... 
} 

internal interface IProjectWithCommands : IProject 
{ 
    ICommand Command { get; set; } 
} 
+0

我認爲這是解決我的問題的最好的一個。謝謝。 –

0

你可以把它的abstract class ..這將允許它訪問修飾符:

internal interface ICommand 
{ 
    // some methods... 
} 

public abstract class Project 
{ 
    // some other methods... 

    internal ICommand Command { get; set; } 
} 

這允許您仍然強制執行合同,同時控制輔助功能的某些部分。然而,這可能會或可能不適合你,因爲它會打破你的繼承能力。

+0

感謝您的建議。但是不可能將其從接口改爲抽象類。 –

+0

_「或者我應該改變結構?」。這種暗示你可以做這樣的事情.. –

+0

因爲你選擇了一個'抽象'類,我想知道你是否打算使'屬性'命令''抽象'?因爲現在它是一個具體和非虛擬的自動生成的屬性(帶有「不可見」的後臺字段),並且繼承者不能更改實現(或擺脫後臺字段)。 –