2010-09-02 15 views
0

真希望有人能指出我在正確的方向,因爲我沒有留下的頭髮了......隱藏內部類。我錯過了什麼?

我開發在VS 2010中使用VB.NET一個簡單的SDK和我有一個類(OuterClass)是繼承另一班(InnerClass)。

InnerClass中有明顯的屬性和方法可以從OuterClass訪問。

我怎麼可以隱藏我的潛在最終用戶,甚至存在InnerClass。我不想隱藏InnerClass內部結構,因爲InnerClass甚至不存在......

無論我嘗試什麼,它總是在類查看器,調試器或編輯器中都可見。

我已經嘗試了平時的競爭者:

<DebuggerBrowsable(DebuggerBrowsableState.Never)> _ 

<ComponentModel.EditorBrowsable(ComponentModel.EditorBrowsableState.Never)> _ 

請能有人甚至只點我在正確的方向。我發現了一些東西,但它們全都與C++有關,它們只是讓我感到困惑。

回答

0

你可以通過接口和工廠方法解決這個問題。

Public Interface IOuterClass 

End Interface 


Friend MustOverride InnerClass 

End Class 


Friend Class OuterClass 
    Implements IOuterClass 
    Inherits InnerClass 

End Class 


Public Class OuterClassFactory 

    Public Shared Function Create() as IOuterClass 
    Return New OuterClass() 
    End Function 

End Class 
+0

感謝您的幫助!非常感謝...... // A – thor69uk 2010-09-04 20:15:23

1

如果來自InnerClass的OuterClass子類,則InnerClass必須至少與OuterClass一樣可見。如果你真的想要隱藏InnerClass,那麼你需要切換到「OuterClass使用InnerClass」架構而不是「OuterClass是InnerClass」架構。

+0

你好,非常感謝你回到我身邊。我明白你的意思,但我不確定它的實施。你能給我一個簡單的例子嗎? // A – thor69uk 2010-09-02 23:06:45

+0

public class OuterClass { private class InnerClass { public int Position {get;設置;} } private InnerClass inner; public int Position { get {return inner.Position; } set {inner.Position = value; } } } – 2010-09-02 23:24:03

+0

嗨,非常感謝你。現在這個概念非常有意義。我剛剛注意到的一件事是,當我寫出這些時,我錯過了InnerClass也被SecondaryClass和OuterClass使用的所有重要的點。如果我將InnerClass移動到OuterClass之外,使其可以被SecondaryClass訪問(即使我將它定義爲Friend),然後在它上面添加 _ line,它就會回頭看着我從調試器中儘快設置斷點...我在這裏丟失了什麼?再次感謝所有人。 – thor69uk 2010-09-02 23:49:09