What is the correct class modifier to pass through an object without allowing a user to create one
<p>So I have a Board User Control </p>

<pre><code> public partial class BoardController : UserControl
    {
        List&lt;HotSpot&gt; _hotSpots;
        List&lt;Area&gt; _areas;
        public BoardController()
        {
            InitializeComponent();
            InitializeHitSpots();
            InitializePlacementArrays();
        }...
</code></pre>

<p>And a Game Controller</p>

<pre><code>public class GameController
{
    private BoardController _board;
    private List&lt;PlayerController&gt; _players;

    public GameController()
    {
        _board = new BoardController();
        _players = new List&lt;PlayerController&gt;();

    }
    public BoardController Board
    {
        get
        {
            return _board;
        }
    }...
</code></pre>

<p>Now even though I have a public property Board if I make the BoardController class internal I throw an error on the next line </p>

<pre><code>    private void Form1_Load(object sender, EventArgs e)
    {
        game = new GameController();           
        this.Controls.Add(game.Board); //&lt;-- this line 
    }
</code></pre>

<p>.</p>

<pre><code> Error:  GameController.Board' is inaccessible due to its protection level  
</code></pre>

<p>What is the proper class modifier declaration so that classes in the same assembly can use the BoardController but other assemblies can not create a BoardController object nor modify 
BoardController outside of the assembly?</p>
