2016-09-30 85 views
0

假設我有這樣的情況:創建內部類的公共屬性?

基類或母類,聲明這種結構:

public static class Mother 
{ 
    private static Childs _child = new Childs(); 

    public static Childs Child 
    { 
      get { return _child; } 
    } 
} 

怎麼可以看到我想要實現一個單基類訪問所有的方法在一個地方如:Mother.Child.SomeMethod。

有了這個結構,我有更好的代碼組織。

現在我想讓Childs類只作爲內部,所以這裏開始問題因爲我不能創建一個內部類的公共屬性。內部類的結構如下:

internal class Childs 
{ 
    public static bool SomeMethod() { ... } 
} 

那麼我該如何製作一個內部類的公共屬性?

+0

'public'只表示「儘可能公開」。由於該類是「internal」,因此該方法具有相同的最大可見性:僅在同一個程序集中才可見。 –

回答

1

如果孩子是內部的,靜態接入點也應該是內部的。

如果您確實想公開訪問某些兒童的成員,請考慮使用界面。

無論如何,如果有一個靜態接入點,您不需要使成員靜態。

public static class Mother 
{ 
    private static Child _child = new Child(); 

    public static IChild Child 
    { 
      get { return _child; } 
    } 
} 

public interface IChild 
{ 
    // public stuff here 
    bool SomeMethod(); 
} 


internal class Child : IChild 
{ 
    public bool SomeMethod() { ... } 
    // additional internal members here 
} 
0

你不能那樣做。如果該財產是公共的,任何其他類都可以訪問它。但是如果他們能夠得到它,他們也必須能夠訪問正在接收的課程。

1

繼承樹中的所有類必須至少具有與層次結構中最高類相同的可見性。沒有辦法從一個內部類派生一個公共類。

也許你的Childspublic。如果你願意,你可以使它abstract防止實例化它或使構造函數內部阻止在另一個程序集中派生它。

+0

如果我將它聲明爲公共抽象,我可以在antoher程序集中看到它,也許我理解錯了嗎? – Unchained

+0

您可以看到它,但無法重複使用。由於最高級別是「公共」,因此無法將其從另一個程序集中隱藏起來。所有的課程都需要公開。 –

+0

嗯,'abstract'不會阻止它們繼承它嗎?爲此你使用'密封'。 – juunas