2010-10-05 6 views
0

Je développe une bibliothèque de classes qui sera utilisée dans plusieurs projets.Modificateurs d'accès de classe .NET (ami et public)

Dans ma bibliothèque de classes, j'ai une classe "Shape" qui a un certain nombre de propriétés. L'une de ces propriétés est "Dimensions" renvoie une classe avec les propriétés "Hauteur" "Largeur" ​​et "Profondeur". Comment supprimer la classe Dimension de l'affichage dans l'éditeur, tout en étant librement disponible dans la bibliothèque de classes?

J'ai placé une commande dans le fichier de classe, mais cela la cache dans la bibliothèque et dans mon application.

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

J'ai également changé le modificateur de acess de classe à un ami, mais cela empêche l'accès du public à la propriété dans la classe de forme lorsqu'il est appelé en dehors de la bibliothèque de classes. Tout ce que je veux faire est d'empêcher la création d'une instance de la classe Dimension en dehors de la bibliothèque de classes.

Merci.

C'est la fonctionnalité de code que je veux atteindre:

Interface IShape 

    ReadOnly Property Properties() As ShapeProperties 

End Interface 

Public Class Shape 

    Implements IShape 

    Dim _Properties As New ShapeProperties(0, 0, 0) 

    Sub New() 
     _Properties = New ShapeProperties(3, 4, 5) 
    End Sub 

    Public ReadOnly Property Properties() As ShapeProperties Implements IShape.Properties 
     Get 
      Return _Properties 
     End Get 
    End Property 

End Class 

Friend Class ShapeProperties 

    Dim _Height As Integer = 0 
    Dim _Width As Integer = 0 
    Dim _Depth As Integer = 0 

    Friend Sub New(ByVal h As Integer, ByVal w As Integer, ByVal d As Integer) 
     _Height = h 
     _Width = w 
     _Depth = d 
    End Sub 

    Private ReadOnly Property Height() As Integer 
     Get 
      Return _Height 
     End Get 
    End Property 
    Private ReadOnly Property Width() As Integer 
     Get 
      Return _Width 
     End Get 
    End Property 
    Private ReadOnly Property Depth() As Integer 
     Get 
      Return _Depth 
     End Get 
    End Property 

End Class 

Je ne pouvais pas compiler la bibliothèque de classes dans le code ci-dessus. Je veux que ShapeProperties soit seulement accessible dans la classe Shape, pas seul. La seule façon dont j'ai pu résoudre ceci était de changer la propriété d'accès de ShapeProperties qui n'est pas ce que je veux.

ClassLibrary.Shape est OK mais ClassLibrary.Properties ne l'est pas.

Merci.

Répondre

1

Vous pouvez créer une interface publique (IShape) et créer une classe privée qui l'implémente.

Questions connexes