2012-09-27 2 views
2

OOP에서 논의 된 기능 중 하나는 가상 멤버입니다. 이 수락런타임시 가상 멤버 디스패치

가상 회원

가 객체 (들)의 유형에 의존하는 가상의 방법을 의미 하는가 런타임 유형에 파견 또는 오히려 다루는 : 나는 다음과 같은 성명에서 찾고 변수 유형?

모든 수정이나 의견을 부탁드립니다.

감사합니다, 그것은 그 각각의 구현을위한 동일해야 같은 방법이 허용하는 매개 변수와는 아무 상관이 없습니다 미트

답변

7

번호. 즉, 메서드가 호출되는 형식에 따라 런타임에 가상 메서드가 확인됩니다. 이것을 고려하십시오 :

public void PrintHi(Parent instance) 
{ 
    Console.WriteLine(instance.SayHi()); 
} 

당신은 그 방법 세 가지 방법 중 하나를 호출하지만, 당신이 본 모든 위의 방법 인 경우 런타임 때까지 결과를 알 수 없습니다 : :

public class Parent 
{ 
    public virtual string SayHi() 
    { 
     return "Hi!"; 
    } 
} 

public class NiceChild : Parent 
{ 
    public override string SayHi() 
    { 
     return "Hello World!"; 
    } 
} 

public class MeanChild : Parent 
{ 
    public override string SayHi() 
    { 
     return "You suck!"; 
    } 
} 

을 이제, 우리는 방법을

PrintHi(new Parent()); // Hi 
PrintHi(new NiceChild()); // Hello World! 
PrintHi(new MeanChild()); // You suck! 
+0

위대한 설명! 고맙습니다 저스틴. –

관련 문제