Override get, but not set

c#

Solution

New in C# 6.0:

If you are only calling the setter within your constructor, you can resolve this problem using read-only properties.

void Main()
{
    BaseClass demo = new DClass(3.6);
}

public abstract class BaseClass
{
    public abstract double MyPop{ get; }
}

public class DClass : BaseClass
{
    public override double MyPop { get; }
    public DClass(double myPop) { MyPop = myPop;}
}

Problem

I have an abstract class that defines a `get`, but not `set`, because as far as that abstract class is concerned, it needs only a `get`. ``` public abstract BaseClass { public abstract double MyPop {get;} } ``` However, in some of the derive class, I need a `set` property, so I am looking at this implementation ``` public class DClass: BaseClass { public override double MyPop {get;set;} } ``` The problem is, I got a compilation error, saying that *.set: cannot override because *. does not have an overridable set accessor. Even though I think that the above syntax is perfectly legitimate. Any idea on this? Workaround, or why this is so? Edit: The only approach I can think of is to put both `get` and `set` as in the abstract class, and let the subclass throws a `NotImplementedException` if `set` is called and it's not necessary. That's something I don't like, along with a special setter method .

Original source

Related problems