C#接口操作名称

时间:2013-12-22 13:09:53

标签: c# interface

这个操作的正式名称是什么? 拳击还是什么? 我用“< ----”

标记该行
        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();
}

2 个答案:

答案 0 :(得分:1)

这不是拳击或拆箱。它是Polymorphism

http://msdn.microsoft.com/en-us/library/ms173152.aspx

答案 1 :(得分:1)

这是一个“向上倾斜”。

想象一下,继承层次结构从最少派生到大多数派生类型从上到下。您在上面的示例中所做的是将更多派生类型视为较少派生类型。你实际上通过继承hieararchy“向上” - 因此向上演员。

你可以这样做,因为更多的派生类型可以保证得到的东西越少(但不是相反)。


顺便说一下,你没有改变对象的类型,你只是对它进行了另一个引用,而且这个引用只会限制你对象的较少派生“部分”。

这是多态性的基础。当您在下面的行中调用inintro.DoExecute()时,它将通过所谓的“动态调度”(不要与dynamic类型混淆)来执行此操作,并根据运行时类型选择方法宾语。在这种情况下,这不是特别有用,因为你只能a.DoExecute(),但是组织大型程序的基本技术之一,其中特定对象的运行时类型可能事先不知道。