Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

readonly property setter

Tags:

c#

properties

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}

like image 718
Anonymous Coward Avatar asked Feb 17 '26 06:02

Anonymous Coward


2 Answers

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();
    }
}
like image 78
bitbonk Avatar answered Feb 19 '26 20:02

bitbonk


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; }
}
like image 38
Adam Robinson Avatar answered Feb 19 '26 20:02

Adam Robinson