繁体   English   中英

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

[英]Why do I need an explicit downcast if my object of type “object” is pointing to the correct instance in hierarchy?

考虑以下继承:

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;
}

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

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

在您的示例中, object Leo = new MarketingPerson(); ,您声明变量Leoobject类型。 您可以在该变量中放入MarketingPerson (或其他任何对象),但仍将其声明object

LayOff方法被声明为接受Employee因为object不是从employee派生的,因此您需要将其强制转换为告诉编译器“我正在将该object强制为Employee

因为object不是Employee 编译器不知道Leo设置为Employee的实例,只知道它是一个object

对象类型是.NET Framework中对象的别名。 在C#的统一类型系统中,所有类型(预定义和用户定义的类型,引用类型和值类型)都直接或间接继承自Object。 您可以将任何类型的值分配给类型为object的变量。 将值类型的变量转换为对象时,将其装箱。 当类型为object的变量转换为值类型时,可以说它已取消装箱。 有关更多信息, 请参见装箱和拆箱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM