method inherited how herencia c# inheritance properties polymorphism override

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(); } } }