2010-09-02 6 views
0

Espérons vraiment que quelqu'un peut me diriger dans la bonne direction comme je l'ai plus de cheveux plus ...Masquage des classes internes. Qu'est-ce que je rate?

Je développe simple SDK en utilisant VB.NET dans VS 2010 et j'ai une classe (OuterClass) qui est héritant une autre classe (InnerClass).

Il y a évidemment des propriétés et des méthodes dans le InnerClass qui sont accessibles à partir du OuterClass.

Comment diable puis-je cacher à mes utilisateurs finaux potentiels que InnerClass existe même. Je ne veux pas cacher les internes InnerClass juste le fait que InnerClass est encore là ...

Peu importe ce que j'essaie, il est toujours visible dans la classe classeur, débogueur ou éditeur.

J'ai essayé les prétendants habituels:

<DebuggerBrowsable(DebuggerBrowsableState.Never)> _ 

et

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

S'il vous plaît quelqu'un peut même me montrer juste dans la bonne direction. J'ai trouvé quelques trucs mais ils sont tous à faire avec C++ et ils ne font que créer de la confusion.

Répondre

0

Vous pourriez résoudre ce problème avec des interfaces et une méthode d'usine.

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

Merci pour votre aide! Très apprécié ... // A – thor69uk

1

Si les sous-classes OuterClass proviennent de InnerClass, InnerClass doit être au moins aussi visible que OuterClass. Si vous souhaitez vraiment masquer InnerClass, vous devez passer à une architecture "OuterClass utilise InnerClass" au lieu d'une architecture "OuterClass is a InClass".

+0

Salut Ken, Merci beaucoup d'avoir répondu à mes questions. Je comprends ce que vous voulez dire, mais je ne suis pas sûr de sa mise en œuvre. Pourriez-vous conseiller avec un exemple simple du tout s'il vous plaît? // A – thor69uk

+0

public class OuterClass { private class InnerClass { public int Position {get; set;} } private InnerClass interne; public int Position { get {return inner.Position; } set {inner.Position = valeur; } } } –

+0

Salut, merci beaucoup pour cela. Maintenant, le concept prend tout son sens. Une chose que j'ai remarquée est que lorsque j'ai écrit ceci, j'ai manqué le point le plus important qu'InnerClass est aussi utilisé par SecondaryClass et OuterClass. Si je déplace InnerClass en dehors de OuterClass pour le rendre accessible à SecondaryClass (même si je le définis comme Friend) et que j'ajoute la ligne _ au-dessus, il me regarde fixement à partir du débogueur dès que je mets un point d'arrêt ... Qu'est-ce que je manque ici ??? Merci encore à tous. – thor69uk

Questions connexes