title: .NET class access modifiers (friend and public)
body: <p>I am developing a class library that will be used in several projects.</p>
  
  <p>In my class library, I have a "Shape" Class which has a number of properties.
  One of these properties is "Dimensions" returns a class with "Height" "Width" and "Depth" properties.</p>
  
  <p>How would I suppress the Dimension class from being viewable in the editor, whilst freely avilable in the class library?</p>
  
  <p>I've put a command in the class file, but this hides it in the library and my application.</p>
  
  <pre><code>&lt;ComponentModel.EditorBrowsable(ComponentModel.EditorBrowsableState.Never)&gt; _
  </code></pre>
  
  <p>I have also changed the class acess modifier to Friend, but this prevents Public access to the Property in the Shape class when called outside the class library.</p>
  
  <p>All I want to do is prevent creating an Instance of the Dimension class outside the class library.</p>
  
  <p>Thanks.</p>
  
  <p>This is the code functionality I like to achieve:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>I could not compile the Class Library in the above code. I want ShapeProperties to be only accessible in the Shape class, not on its own. The only way I was able to resolve this was to change the access property of ShapeProperties which is not what I want.</p>
  
  <p>ClassLibrary.Shape is OK but
  ClassLibrary.Properties is not.</p>
  
  <p>Thanks.</p>