In a base class I have this property:
public virtual string Text
{
get { return text; }
}
I want to override that and return a different text, but I would also like to be able to set the text, so I did this:
public override string Text
{
get { return differentText; }
set { differentText = value; }
}
This however does not work. I get a red squiggly under set saying that I can not override because it does not have a set accessor. Why is this aproblem? What should I do?
In your second block of code you are creating a public set method, but the word “override” in the declaration makes the compiler look for a method with the same signature in the base class. Since it can’t find that method it will not allow you create your set.
As ArsenMkrt says you could change your base declaration to contain a protected set. This will allow you to override it, but since you still won’t be able to change the signature you can’t promote this method to public in your subclass, so the code you posted still won’t work.
Instead you either need to add a public virtual set method to your base class that doesn’t do anything (or even throws an exception if you try and call it) but this goes against what a user of the class would expect the behaviour to be so if you do this (and I won’t recommend it) make sure it is so well documented that the user can’t miss it:
Otherwise declare the set as a separate method in your child class: