C# – How to override the setter method of a property in C#

cgetoverridingpropertiesset

I have a class with a subclass. The superclass has a Position property. The subclass must perform an additional operation when the Position property is changed, so I am attempting to override the setter method and call the superclass' setter.

I think I've got the superclass setter calling part down, but I can't figure out how the overriding syntax works here.

Here is my best attempt:
code

The getter is there just for proof of concept — suppose I wanted to override that too?

The getter and setter give me errors of this form:

cannot override inherited member 'superClassName.Position.[gs]et' because it is not marked virtual, abstract, or override

Here's a screencap of the errors too for good measure:
errors

I also tried using the override keyword in front of the set. Removing the superfluous getter has no effect.

What is the correct syntax?

Best Answer

The override is fine. However, as the error message states, you need to mark the property in the base class as virtual to be able to override it:

public virtual Vector2 Position

Unlike Java, class members are not virtual by default in C#. If you can't change the base class, you're out of luck.