Why do I need an explicit downcast if my object of type "object" is pointing to the correct instance in hierarchy?
<p>Consider the following inheritance:</p>

<pre><code>abstract class Employee
{
     private string empID;
     private string empName;
}   

class SoftwareDeveloper : Employee 
{
    ............    
}

class MarketingPerson : Employee
{
    ........... 
}

static void Main()
{
    Employee Jaffer = new SoftwareDeveloper();
    Employee George = new MarketingPerson();

    // Ok because of is-a relationship    
    LayOff(Jaffer);

    // Ok because of is-a relationship    
    LayOff(George);

    object Leo = new MarketingPerson();

    // Error because downcast is required as (MarketingPerson) Leo
    LayOff(Leo);
}

static bool LayOff(Employee emp)
{
    // some Business Logic
    return true;
}
</code></pre>

<p>Even though the declaration <code>object Leo = new MarketingPerson()</code> points to an instance of MarketingPerson, why do I need to downcast?</p>
