visual property generar example c# get properties override set

property - ¿Cómo anulo el método de establecimiento de una propiedad en C#?



set value to property c# (5)

Tengo una clase con una subclase. La superclase tiene una propiedad de Position . La subclase debe realizar una operación adicional cuando se cambia la propiedad Position , por lo que estoy intentando anular el método de establecimiento y llamar al establecimiento de superclase.

Creo que tengo que descartar al que establece la superclase, pero no puedo entender cómo funciona la sintaxis dominante aquí.

Aquí está mi mejor intento:

El captador está ahí solo como prueba de concepto, ¿supongo que yo también quisiera anular eso?

El getter y setter me dan errores de esta forma:

no se puede anular el miembro heredado ''superClassName.Position. [gs] et'' porque no está marcado como virtual, abstracto o anulado

Aquí hay una captura de pantalla de los errores también para una buena medida:

También intenté usar la palabra clave anular delante del set . Eliminar el acumulador superfluo no tiene ningún efecto.

¿Cual es la sintaxis correcta?


El problema se te indica en el mensaje de error :)

No puede anular miembros que no sean virtuales (o abstractos) en primer lugar.

Su superclase necesita tener virtual en la definición de propiedad:

public virtual Vector2 Position { ... }


La anulación está bien. Sin embargo, como indica el mensaje de error, debe marcar la propiedad en la clase base como virtual para poder anularla:

public virtual Vector2 Position

A diferencia de Java, los miembros de la clase no son virtuales por defecto en C #. Si no puedes cambiar la clase base, estás fuera de suerte.


No puede anular miembros no marcados como virtual o abstract

Marque su propiedad Vector2 en una súper clase como virtual .

public virtual Vector2 Position


Su propiedad de Position no es virtual en la clase base, por lo que no puede anularla. Si lo haces virtual, deberías poder sobrescribirlo.

Se vuelve un poco desordenado sobrescribiendo un poco sin el otro - no es el tipo de cosas que hago muy a menudo, así que tengo que jugar un poco para asegurarme de lo que está sucediendo, pero lo primero que se debe hacer es cambiar la propiedad de la clase base ...

Esto también es exactamente lo que el mensaje del compilador le está diciendo:

no se puede anular el miembro heredado ''superClassName.Position. [gs] et'' porque no está marcado como virtual, abstracto o anulado

Le está diciendo algo sobre la propiedad de la clase base, así que eso es lo que necesita cambiar para anularlo. Los mensajes del compilador están ahí para ayudar - ¡Préstales mucha atención!


en su clase base: agregar palabra clave virtual