2010-12-10 2 views
14

기본 클래스의 메서드에 virtual을 추가하고 새 클래스에 override을 추가하여 메서드를 상속하는 방법을 배웠습니다. 하지만 재산을 상속하려면 어떻게해야합니까?C#에서 상속 된 클래스 속성을 재정의하는 방법은 무엇입니까?

class bird 
{ 
    private virtual string fly = "Yes, I can!"; 
    public string CanI() { return fly ; } 
} 

class penguin : bird 
{ 
    private override string fly = "No, I can't!"; 
} 

이것은 수정이 virtual/override가 여기에 사용되어서는 안된다는 말을, 오류가 나타납니다.

답변

25

fly은 (는) 속성이 아닙니다. 필드는 무시할 수 없습니다. 이 작업을 수행 할 수 있습니다 내가 protectedfly을 표시했다

class bird { 
    protected virtual string Fly { 
     get { 
      return "Yes, I can!"; 
     } 
    } 
    public string CanI() { return Fly; } 
} 

class penguin : bird { 
    protected override string Fly { 
     get { 
      return "No, I can't!"; 
     } 
    } 
} 

참고.

귀하의 예제에서 속성없는
abstract class Bird { 
    public abstract bool CanFly { get; } 
    public string SayCanFly() { 
     if(CanFly) { 
      return "Yes, I can!"; 
     } 
     else { 
      return "No, I can't!"; 
     } 
    } 
} 

class Penguin : Bird { 
    public override bool CanFly { 
     get { 
      return false; 
     } 
    } 
} 

class Eagle : Bird { 
    public override bool CanFly { 
     get { 
      return true; 
     } 
    } 
} 
+0

감사합니다! :) – Rob

+3

@Downvoter : 정말 설명해야합니다. – jason

+0

나는 downvote를 보았다. 나는 정말로 당신이 대답하는 것을 downvote하고 싶지 않았다. 가짜 마우스 클릭? 불행을 드려 죄송합니다. 나는 그것을 제거했습니다. – Luca

3

, 그것은 필드 :

그러나 더 나은

, 나는 같은 것을 할 것입니다. 속성을 사용해 보거나 단순히 비행을 보호 된 것으로 표시하여 하위 클래스에서 액세스 할 수 있습니다.

1

이 코드 :

private virtual string fly = "Yes, I can!"; 

는 필드가 아닌 속성을 만드는 것입니다. 또한 가상으로하려면 속성에 '비공개'이상의 액세스 권한이 있어야합니다. 아마도 다음과 같은 것을 원할 것입니다 :

public virtual string Fly 
{ 
    get { return "Yes, I can!"; } 
} 
관련 문제