2011-12-31 12 views
5

Ben şu temel sınıf set korumalı:geçersiz kılınamaz mülkiyet en

abstract class Base 
{ 
public abstract object Var 
{ 
    get; 
    protected set; 
} 
} 

Ve bu türetilmiş sınıf:

Cannot change access modifier when overriding 'protected' inherited member 'Var'

I:

class Derived : Base 
{ 
public override object Var 
{ 
    get {//code here 
    } 
    set {//code here -- I get error here! 
    } 
} 
} 

Ama bu hatayı alıyorum ayarlanmadan önce protected ve private anahtar kelimeler eklemeyi denedi, ancak yardımcı olmadı. Bunu nasıl düzeltirim?

GÜNCELLEME:
sınıf alt sınıfları oluşturma sırasında Var için bir değer sağlamak emin olmalısınız tabanı. Bu yüzden, setterin Base sınıfında ilan edilmesine ihtiyacım var.
Alternatif olarak, bunu yapmak ve setter kaldırmak için özel bir üye değişkeni bildirmek olabilir, ancak bu tartışılan bir seçenek olarak değil here.

cevap

8

Sorun şu ki, türetilmiş sınıfınızda set, protected belirtmediğinizden dolayı public görünürlüğüne sahiptir.

class Derived : Base { 
    public override object Var { 
     get { return null; } 
     protected set { // <------ added protected here 
     } 
    } 
} 
+1

Aman tanrım: Bu tesisin seti temel sınıfta görünürlük korumalı olduğundan, hata

cannot change access modifiers when overriding 'protected' inherited member

Sen türetilmiş sınıfta kümesi korumalı görmelerini sağlayarak çözebilirsiniz alıyoruz! Aptal VS! Gönderide söylediğim gibi bunu denedim ve yardım etmedi. Bahsettiğin zaman tekrar denedim, hala işe yaramadı, cevabınıza tekrar baktım, yeniden derledim ve gitti! Peki şimdi ne yapıyorum? cevabını kabul etmeli mi yoksa gönderimi kaldırmalı mıyım? – atoMerz

+0

@AtoMerZ - En iyi cevabı kabul eder ve devam ederim. Soruda cevaplar kesildiğinden, onu kaldırmak için bir mod gerekecek. Hiç kimse için sorun değil. –