¿Puedo anular una propiedad en c #? ¿Cómo?

Tengo esta clase base:

abstract class Base { public int x { get { throw new NotImplementedException(); } } } 

Y el siguiente descendiente:

 class Derived : Base { public int x { get { //Actual Implementaion } } } 

Cuando compilo recibo esta advertencia diciendo que la definición de x de la clase derivada esconderá la versión de Base. ¿Es posible anular propiedades en métodos c #?

Necesita usar palabra clave virtual

 abstract class Base { // use virtual keyword public virtual int x { get { throw new NotImplementedException(); } } } 

o define una propiedad abstracta:

 abstract class Base { // use abstract keyword public abstract int x { get; } } 

y use la palabra clave override cuando esté en el niño:

 abstract class Derived : Base { // use override keyword public override int x { get { ... } } } 

Si NO va a sobrescribir, puede usar una palabra clave new en el método para ocultar la definición del elemento principal.

 abstract class Derived : Base { // use override keyword public new int x { get { ... } } } 

Haga la propiedad base abstracta y anule o use la nueva palabra clave en la clase derivada.

 abstract class Base { public abstract int x { get; } } class Derived : Base { public override int x { get { //Actual Implementaion } } } 

O

 abstract class Base { public int x { get; } } class Derived : Base { public new int x { get { //Actual Implementaion } } } 

Cambiar la firma de la propiedad como se muestra a continuación:

Clase base

 public virtual int x { get { /* throw here*/ } } 

Clase derivada

 public override int x { get { /*overriden logic*/ } } 

Si no necesita ninguna implementación en la clase Base, solo use la propiedad abstracta.

Base:

 public abstract int x { get; } 

Derivado:

 public override int x { ... } 

Le sugiero que use abstract propiedad abstract lugar de mostrar la excepción NotImplemented en getter, el modificador abstact obligará a todas las clases derivadas a implementar esta propiedad para que termine con una solución segura en tiempo de comstackción.

 abstract class Base { // use abstract keyword public virtual int x { get { throw new NotImplementedException(); } } } 
 abstract class Base { public virtual int x { get { throw new NotImplementedException(); } } } 

o

 abstract class Base { // use abstract keyword public abstract int x { get; } } 

En ambos casos, debes escribir en la clase derivada

 public override int x { get { your code here... } } 

La diferencia entre los dos es que con el resumen se fuerza a la clase derivada a implementar algo, y con virtaul puede proporcionar un comportamiento predeterminado que el deriver puede usar tal cual o cambiar.