title: Why is the double colon(::) operator required to resolve a namespace conflict?
body: <p>Please see my below sample program. I have two namespaces containing the same <code>struct</code>. To avoid conflict while using in <code>Main()</code>, I have given the namespaces aliases. While invoking the <code>struct</code> from <code>Main()</code>, I am able to invoke directly through namespace alias, like <code>test.MyStruct</code>. I have another option also using <code>::</code> operator, like <code>test::MyStruct</code>.</p>
  
  <p>Why is the <code>::</code> operator required, and where should I use it instead of an alias? </p>
  
  <pre><code>using System;
  using test=counter;
  using duplicatecounter;
  
  namespace counter
  {
      struct MyStruct
      {
  
      }
  }
  
  namespace duplicatecounter
  {
      struct MyStruct
      {
  
      }
  }
  
  class Program
  {
      public static void Main()
      {
          test.MyStruct a = new test.MyStruct();
          test::MyStruct a1 = new test::MyStruct();
      }
  }
  </code></pre>