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

그것은이 "업 캐스팅"을합니다.

최소 파생 유형에서 대부분의 파생 유형까지 위에서 아래로 상속 계층 구조를 상상해보십시오. 위의 예제에서 수행중인 작업은 더 파생 된 유형을 덜 파생 된 유형으로 처리하는 것입니다. 당신은 효과적으로 상속 인사말을 통해 "위로"가고 있습니다 - 따라서 위로 캐스트.

더 많은 파생 유형이 파생되지 않은 모든 항목을 가질 수 있으므로 (다른 방법은 사용할 수 없음)이 작업을 수행 할 수 있습니다.


BTW, 당신은 객체의 유형을 변경하지 다시, 당신은 단지 또 다른 참조를 만들고, 그 기준은 개체의 적은 파생 된 "부분"에 당신을 제한하는 일.

이것은 다형성의 기초입니다. 아래 줄에서 inintro.DoExecute()을 호출하면 소위 "동적 전달"(dynamic 유형과 혼동하지 말 것)을 통해 수행하고 객체의 런타임 유형을 기반으로 메소드를 선택합니다. 이 경우에 특히 유용하지는 않습니다. 단지 a.DoExecute() 일 수 있지만 특정 프로그램의 런타임 유형이 미리 알려지지 않은 큰 프로그램을 구성하는 기본 기술 중 하나입니다.

1

을 표시 그것은 권투 또는 unboxing.It의 Polymorphism 아니에요 :

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

+1

엄밀히 말하면,'DoExecute' 메쏘드가 실제로 호출되었을 때 그 아래의 줄에서만 다형성이있을 것입니다. (C# 컴파일러가 거기에서 타입 검사를하지 않고 런타임에 실패 할 수있는 호환되지 않는 유형의 할당을 허용 한 경우 결국 "다형성"이라고 부르지 않을 것입니다.) –