inherited - override tostring c#
¿Puedo anular una propiedad en c#? ¿Cómo? (5)
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 compilación.
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 #?
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 }
}
}
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 { ... } }
}
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.
abstract class Base
{
// use abstract keyword
public virtual int x
{
get { throw new NotImplementedException(); }
}
}