readonly property setter

12,132

Solution 1

You mixed something up here. In your example the compiler will yield an error if you try to do A.Budget=new SomeObject(); if the property Budget in class A does not have a setter. From here on I can only assume what your problem is.

My guess is that you would like the collection wrapped in the Budget property to be readonly. That's probably why you made it IEnumerable<SomeObject> whereas the private member is a List<SomeObject>. So even if you do do not have a setter you can still do (A.Budget as List<SomeObject>).Add(bla). To prohibit this you can use List.AsReadOnly like this:

private readonly List<SomeObject> _budget;
public ReadOnlyCollection<SomeObject> Budget
{
    get
    {
        return _budget.AsReadOnly();
    }
}

Solution 2

If your property has a setter, it isn't read-only. Remove the setter to make it read-only.

public string MyProperty // not read-only
{
    get { return myPropertyBacking; }
    set { myPropertyBacking = value; }
}

public string MyProperty // read-only
{
    get { return myPropertyBacking; }
}

Solution 3

Remove the setter.

Share:
12,132
Anonymous Coward
Author by

Anonymous Coward

Updated on June 04, 2022

Comments

  • Anonymous Coward
    Anonymous Coward almost 2 years

    After a extensive debugging session I found that the problem was that I called the setter of a readonly property. Is there a trick to provoke a compiler warning when this happens? Because marking the setter private does not work.

    Cheers,

    CA


    To make clear what I mean:

        private readonly List<SomeObject> _budget;
        public IEnumerable<SomeObject> Budget
        {
            get
            {
                return _budget;
            }
        }
    

    Can be accessed with

    A.Budget=new SomeObject();
    

    without compiler {error,warning,message}