2010-12-10 25 views
14

Temel sınıftaki yönteme ve override yeni sınıfa virtual ekleyerek yöntemlerin nasıl devralınacağını öğrendim. Ama özellikleri miras almak için ne yapabilirim?C# içinde miras alınan bir sınıf özelliğini nasıl geçersiz kılar?

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

Bu düzenleyiciler virtual/override burada kullanılmamalıdır söyleyerek bir hata çıkar.

cevap

25

fly bir özellik değil, bir alan. Alanlar değiştirilemez. Bunu yapabilirsiniz: Ben protected olarak fly işaretlemek zorunda

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

Not.

sizin örnekte bir özellik değildir
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

İşe yarıyor, teşekkürler! :) – Rob

+3

@Downvoter: Gerçekten, açıklamalısınız. – jason

+0

Şimdi indirimi gördüm. Cevap vermeyi reddetmek istemedim. Sahte fare tıklaması mı? Rahatsızlık için özür dilerim, onu kaldırdım. – Luca

3

, bir alandır:

Fakat daha güzel

, ben böyle bir şey yapmak istiyorum. Bir özelliği kullanmayı deneyin ya da sinyalin korumalı olarak işaretlenmesini sağlayın, böylece alt sınıfa erişebilirsiniz.

1

Bu kod:

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

bir alanı değil, bir özellik yaratıyor. Ayrıca, sanal olmanız için mülkünüzün 'özel' düzeyden daha yüksek bir erişimi olmalıdır. Muhtemelen böyle bir şey istersiniz:

public virtual string Fly 
{ 
    get { return "Yes, I can!"; } 
} 
İlgili konular