这个操作的正式名称是什么? 拳击还是什么? 我用“< ----”
标记该行 Auto a = new Auto();
// What de name of this operation? boxing or... ?
INitro inintro = a; // <--- There
inintro.DoExecute();
class Auto:INitro,IChip
{
void INitro.DoExecute()
{
System.Console.WriteLine("INITRO");
}
void IChip.DoExecute()
{
System.Console.WriteLine("ICHIP");
}
}
interface INitro
{
void DoExecute();
}
答案 0 :(得分:1)
这不是拳击或拆箱。它是Polymorphism
:
答案 1 :(得分:1)
这是一个“向上倾斜”。
想象一下,继承层次结构从最少派生到大多数派生类型从上到下。您在上面的示例中所做的是将更多派生类型视为较少派生类型。你实际上通过继承hieararchy“向上” - 因此向上演员。
你可以这样做,因为更多的派生类型可以保证得到的东西越少(但不是相反)。
顺便说一下,你没有改变对象的类型,你只是对它进行了另一个引用,而且这个引用只会限制你对象的较少派生“部分”。
这是多态性的基础。当您在下面的行中调用inintro.DoExecute()
时,它将通过所谓的“动态调度”(不要与dynamic类型混淆)来执行此操作,并根据运行时类型选择方法宾语。在这种情况下,这不是特别有用,因为你只能a.DoExecute()
,但是组织大型程序的基本技术之一,其中特定对象的运行时类型可能事先不知道。