2013-12-22 2 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

Это "вентиляционный".

Представьте себе иерархию наследования как идущую сверху вниз от наименее производной к большинству производных типов. То, что вы делаете в приведенном выше примере, обрабатывает более производный тип как менее производный тип. Вы эффективно идете «вверх» через иерархию наследия наследования - следовательно, up cast.

Вы можете сделать это, так как гарантировано, что у более производного типа будет все, чем меньше выведено (но не наоборот).


BTW, вы повторно не изменяя тип объекта, вы просто сделать другую ссылку на него, и что ссылка случается ограничить вас только менее производном «часть» объекта.

Это основа полиморфизма. Когда вы вызываете inintro.DoExecute() в строке ниже, он будет делать это через так называемую «динамическую отправку» (не путать с типом dynamic) и выбрать метод, основанный на типе времени выполнения объекта. Это не особенно полезно в этом случае, так как вы можете просто a.DoExecute(), но это один из основных методов организации больших программ, где время выполнения определенного объекта может быть неизвестно заранее.

1

Это не бокс или unboxing.It-х Polymorphism:

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

+1

Строго говоря, это полиморфизм, вероятно, только в строке ниже, когда метод DoExecute действительно вызывается. (Если компилятор C# не указал typecheck там и разрешил назначение несовместимых типов, которые затем потерпели бы неудачу во время выполнения, в любом случае он не будет называться «полиморфизмом».) –

Смежные вопросы