[英]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();
,您声明变量Leo
是object
类型。 您可以在该变量中放入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.