2010-12-10 11 views
14

Nauczyłem się dziedziczyć metody, dodając virtual do metody w klasie bazowej i override w nowej klasie. Ale co mam zrobić, aby dziedziczyć właściwości?Jak zastąpić odziedziczoną właściwość klasy w języku 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!"; 
} 

to wyskakuje błąd, mówiąc, że modyfikatory virtual/override nie powinien być stosowany tutaj.

Odpowiedz

25

fly nie jest własnością, jest polem. Pola nie są nadpisywane. Można to zrobić:

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!"; 
     } 
    } 
} 

Zauważ, że musiałem zaznaczyć fly jako protected.

Ale nawet lepiej, chciałbym zrobić coś takiego:

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

Wydaje się pracować, dzięki! :) – Rob

+3

@Dawcar: Naprawdę, powinieneś wyjaśnić. – jason

+0

Widziałem teraz upadek. Naprawdę nie chciałem ci odpowiadać. Złudne kliknięcie myszą? Przepraszam za incydent, usunąłem to. – Luca

3

To nie jest właściwością w przykładzie, jest to pole. Spróbuj użyć właściwości lub po prostu oznacz, że mucha jest chroniona, więc możesz uzyskać do niej dostęp w swojej podklasie.

1

ten kod:

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

tworzy pole, a nie materialnych. Aby być wirtualnym, twoja własność musi mieć wyższy dostęp niż "prywatny". Prawdopodobnie chcesz coś takiego:

public virtual string Fly 
{ 
    get { return "Yes, I can!"; } 
} 
Powiązane problemy