C# - Create class that creates another class that can be overloaded (like excel - Thisworkbook.Worksheets)
<p>In Excel object model '<strong>Thisworkbook</strong>' is a class that has '<strong>Worksheets</strong>' class in it and can be <strong>overloaded</strong> with index or by sheet name. Moreover, '<strong>Worksheets</strong>' class also has some properties/methods that can be called with/without calling the constructor (default).</p>

<ul>
<li>E.g. MsgBox ThisWorkbook.Worksheets(1).Name <strong>'&lt;-- by (int)</strong></li>
<li>E.g. MsgBox ThisWorkbook.Worksheets("Sheet1").Name <strong>'&lt;- by (string)</strong></li>
<li>E.g. Msgbox Thisworkbook.Worksheets.Count '&lt;- <strong>'count property</strong></li>
</ul>

<p>How can I create such class in <strong>C#</strong> that has another class in it and can be overloaded?
I have tried creating a public variable of the 2nd class in the 1st class but I can only call default constructor (or other - but just one at a time)</p>

<pre><code>class A
{
    public B b = new B(); // &lt;-- this is 1st constructor but how to overload ?
}

class B
{
    public B() // Default Constructor
    {
    }
    public B(int i) // Constructor 2
    {
    }
    public B(string s) // Constructor 3
    {
    }
    public int Count // Property
    {
        get { return 0; }
    }
}

//------------------------------------------------------------

class Main()
{

   A a = new A();
   a.b.Count(); // &lt;-- THIS WORKS
   // a.b(1).Name; &lt;-- HOW TO, USING THE SAME CLASS?
   // a.b("A").Name; &lt;-- HOW TO, USING THE SAME CLASS?
}
</code></pre>

<p>I know that I have not created an object array - 1 or "A" that can be returned in this example, but I just need the concept (you got it right?). I have also seen few examples using List but I really want to know how I can achieve such object hierarchy in C#... (please excuse me if this is a wrong question).</p>
