2013-08-14 2 views
0

파생 클래스에서 간단한 필드에 액세스 할 수 없으므로 은 필드의 경우 다형성을 사용합니다. Name 속성을 가져 오기 위해 ResponseMBP로 다운 캐스트해야한다면 클라이언트는 파생 클래스에 대해 알아야합니다.기본 클래스를 사용하여 파생 클래스 필드에 액세스 할 수 없습니다.

따라서 다형성은 메소드에서만 작동합니까?

public abstract class Response 
{ 
} 

public class ResponseMbp : Response 
{   
    public string Name = "My Name";   
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Response r = new ResponseMbp(); 
     Console.Write(r.Name); 
    } 
} 
+1

당신은 ResponseMBP에 다운 캐스팅하지 않습니다. 확실히 기본 클래스 참조가 있으면 파생 클래스의 멤버에 액세스 할 수 없습니다. – alex

+0

@Michael, 답장을 보내 주셔서 감사합니다. '업 캐스팅'에 대해 확실합니까? ((ResponseMBP) Response.) .Name을 사용하면 다운 캐스팅이라는 의미일까요? 이것 좀 봐 http://stackoverflow.com/questions/1524197/downcast-and-upcast – Ron

답변

0

우선 필드 다형성을 위해, (다형성 메소드의 경우와 같이) 해당 필드를 기본 클래스와 파생 클래스 모두에서 선언해야합니다.

예제에서 "name"필드는 파생 클래스 서명의 일부일 뿐이며 기본 클래스의 서명에 "name"변수가 없습니다. 이 때문에 기본 클래스의 객체는 파생 클래스로 인스턴스화되지만 기본 클래스 서명 항목 만 보여줍니다. 따라서이 경우 r.name을 사용할 수 없습니다.

필드 다형성의 올바른 사용법을 알고 싶다면 this 링크를 참조하십시오.

1

변수를 Response 유형으로 정의하고 있습니다. 이 시점에서 Response 클래스 및 해당 수퍼 클래스에 포함 된 속성 및 변수에만 액세스 할 수 있습니다.

name이라는 속성이있는 동안에도 Name을 참조하려고합니다.

0

ResponseMbpResponse에서 상속됩니다. 따라서 ResponseMbpResponse이지만 ResponseResponseMbp이 아닙니다.

NameResponseMbp에 정의 했으므로 Response은 이에 대해 알지 못하거나 신경 쓰지 않습니다.

Name을 정의한 경우 ResponseMbp은 속성을 상속하며 어느 클래스에서나 액세스 할 수 있습니다.