2011-12-31 11 views
5

Tengo la siguiente clase base:no puede anular de bienes protegidos establecer

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

Y esta clase derivada:

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

Pero estoy recibiendo este error:

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

I intenté agregar protected y private palabras clave antes del conjunto, pero no sirvió de nada. ¿Cómo puedo solucionar esto?

ACTUALIZACIÓN:
La base de clase debe asegurarse de que las subclases proporcionan un valor para Var en tiempo de creación. Entonces necesito declarar el setter en la clase Base.
Alternativamente, podría declarar una variable de miembro privado para hacer esto y eliminar el setter, pero esa no es una opción como se describe en here.

Respuesta

8

El problema es que set en su clase derivada tiene public visibilidad, ya que no especificó protected explícitamente. Desde el set de esta propiedad ha protegido la visibilidad de su clase base, que está recibiendo el error

cannot change access modifiers when overriding 'protected' inherited member

Puede solucionarlo dando el conjunto protegido visibilidad en su clase derivada:

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

Oh my god! Estúpido VS! Como dije en mi publicación, probé esto y no sirvió de nada. Me reintenté cuando lo mencionaste, aún no funcionó, volví a ver tu respuesta, volví a compilarla y ¡ya no está! ¿Entonces qué hago ahora? ¿Debo aceptar su respuesta o debería eliminar mi publicación? – atoMerz

+0

@AtoMerZ - Aceptaría la mejor respuesta y seguiría adelante. Como la pregunta tiene respuestas modificadas, necesitará un mod para eliminarla. No vale la pena el problema para nadie. –

Cuestiones relacionadas