2013-12-22 66 views
0

在编程科学中这个操作的官方名称是什么? 拳击还是什么? 我标志着符合 “< ----”C#接口操作名称

 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

你的意思是“任务”? –

回答

1

这是一个 “向上转型”。

想象继承层次结构是从最小派生到最派生类型的自顶向下。你在上面的例子中做的是将更多派生类型作为派生类型较少的类型。你有效地通过继承hieararchy“上涨” - 因此上涨演员。

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


顺便说一句,你再不改变对象的类型,则仅仅做另一个引用它,这参考发生在你仅限制到较少导出的对象的“部分”。

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

1

这不是拳击或unboxing.It的Polymorphism

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

+1

严格地说,它的多态性可能只在下面的行中,当实际调用'DoExecute'方法时。 (如果C#编译器没有在那里进行类型检查并允许分配不兼容的类型,那么在运行时会失败,但它毕竟不会被称为“多态性”。) –