如果我的"对象"类型的对象指向层次结构中的正确实例,为什么我需要显式向下转换?

use*_*677 1 c#

考虑以下继承:

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;
}
Run Code Online (Sandbox Code Playgroud)

即使声明object Leo = new MarketingPerson()指向MarketingPerson的一个实例,为什么我需要向下转换?

Ori*_*rds 8

您需要进行强制转换,因为编译器只知道声明的类型.

在您的示例中object Leo = new MarketingPerson();,您声明变量Leo是类型object.你可以MarketingPerson在该变量中放置一个(或其他任何东西),但它仍然被声明object.

LayOff方法被声明为接受Employee- 因为object不是从中派生出来的employee,你需要将它强制object转换为告诉编译器"我强迫它进入Employee