Confusion regarding boxing of value types
<p>In the following code...   </p>

<pre><code> int i=5;  
 object o = 5;
 Console.WriteLine(o); //prints 5
</code></pre>

<p><strong>I have three questions:</strong></p>

<p><strong>1)</strong> What additional/useful  functionality  is acquired by the <code>5</code>  residing in the variable <code>o</code>   that the <code>5</code> represented by the variable <code>i</code> does not have ? </p>

<p><strong>2)</strong> If some code is expecting a value type then  we can just pass it the int <code>i</code> , but if its expecting a reference type , its probably not interested in the 5 boxed in <code>o</code> anyway . So when are boxing conversions explicitly used in code  ?    </p>

<p><strong>3)</strong> How come the <code>Console.WriteLine(o)</code> print out a 5 instead of System.Object ??</p>
