2011-12-31 12 views
5

Ho la seguente classe di base:non può eseguire l'override di proprietà protetto impostata

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

E questa classe derivata:

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

Ma sto ottenendo questo errore:

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

I provato ad aggiungere un protected e alle private parole chiave prima del set ma non è stato d'aiuto. Come posso risolvere questo?

UPDATE:
La base di classe deve fare in modo che le sottoclassi di fornire un valore per Var al momento della creazione. Quindi ho bisogno di dichiarare il setter nella classe Base.
In alternativa, potrei dichiarare una variabile membro privata per fare ciò e rimuovere il setter, ma questa non è un'opzione come discusso here.

risposta

8

Il problema è che il set nella classe derivata ha visibilità public, poiché non è stato specificato esplicitamente protected. Dal momento che il set di questa proprietà ha protetto la visibilità nella classe base, che stai ricevendo l'errore

cannot change access modifiers when overriding 'protected' inherited member

È possibile risolvere il problema dando il set protetta visibilità nella classe derivata:

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

Oh mio dio! Stupido VS! Come ho detto nel mio post ho provato questo e non è stato d'aiuto. Ho ripensato a quando l'hai menzionato, non funzionava ancora, ho guardato di nuovo la tua risposta, ricompilata e non c'è più! Quindi cosa faccio adesso? dovrei accettare la tua risposta o dovrei rimuovere il mio post? – atoMerz

+0

@AtoMerZ - Accetterei la risposta migliore e andare avanti. Poiché la domanda ha generato un aumento delle risposte, avrai bisogno di una mod per rimuoverla. Non vale la pena per nessuno. –

Problemi correlati