Making properties abstract ensures that all inherited classes need to implement that particular property.
Let's say we have a scenario where we want to get the starting wages of all our employees. We have a virtual property in the Employee class that returns a readonly value.
And an override property that returns a readonly value in the Attendant class.
So in the MainWindow let's get the values.
We have a huge problem. The boss's starting wage is less than the attendant's. Why? Because we don't have an override in the Boss class that says the StartingSalary should do anything other than the virtual property in the Employee class. We also have a Custodian class and a HumanResources class that should have their own starting wages and we don't want to make this mistake again. We can fix this by making the property abstract. Making the property abstract makes it so that every descendant of the parent class has to implement that property in some way.
To make a property abstract, we will add the abstract keyword to the right of public.
Notice that we now get a number of errors. The errors that are in the Boss, Custodian and HumanResources classes are saying that we have declared a property abstract but don't have an override in these classes. This error can also be shown when hovering over a class definition that isn't implementing abstract members.
The other error here says that the property shouldn't have a method body. This is because when we make things abstract they are just that...abstractions. They are ideas and ideas are only ideas until you do something with them. So what we need to do is make the abstract property what is a called a "property stub" by eliminating the body of the property.
Now that the property is properly abstract, we MUST implement it in each class.
When this is done all of our errors will go away and when we call the property in the MainWindow we will get the correct value for each type of Employee without fear that a virtual method will return an erroneous value.