title: Array in C# are reference type, why they acts as a value types?
body: <p>According to MSDN, if all arrays are reference type, then why in the given sample code, the new value of <code>t2</code> doesn't reflect the change in <code>t1</code>? </p>
  
  <pre><code>string[] data = new[] { "One", "Two" };
  
  var t1 = data[0];
  
  Console.WriteLine(t1);
  
  var t2 = t1;
  t2 = "Three"; //assigning the new value, and this should reflect in t1
  
  Console.WriteLine(t2);
  Console.WriteLine(t1); // this should print 'Three', but it prints 'One'
  
  Console.Read();
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/ZtBNk.png" alt="enter image description here"></p>
  
  <p><a href="http://msdn.microsoft.com/en-us/magazine/cc301755.aspx" rel="noreferrer">http://msdn.microsoft.com/en-us/magazine/cc301755.aspx</a></p>
  
  <blockquote>
    <p>Arrays are mechanisms that allow you to treat several items as a
    single collection. The Microsoft® .NET Common Language Runtime (CLR)
    supports single-dimensional arrays, multidimensional arrays, and
    jagged arrays (arrays of arrays). All array types are implicitly
    derived from System.Array, which itself is derived from System.Object.
    This means that all arrays are always reference types which are
    allocated on the managed heap, and your app's variable contains a
    reference to the array and not the array itself.</p>
  </blockquote>