Alex Rivera | Logout

c# readonly object

Asked 2010-08-23T17:42:13.060
31

Is there any way to return a readonly instance of an object?

public class Person
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
}

public class SomeClass
{
    public SomeClass(Person manager)
    {
        if (manager == null)
            throw new ArgumentNullException("manager");

        _manager = manager;
    }

    private readonly Person _manager;
    public Person Manager
    {
        get { return _manager; } //How do I make it readonly period!
    }
}

Is the only way to do this by returning a Clone() so that any changes are done to the Clone and not the original? I know for Arrays there is a function to return the Array as read-only. Oh, and I know this is a reference type... I'm moreover wondering if there's some hidden C# feature to lock the writing portion.

I was trying to come up with a Generic ReadOnly wrapper class, but couldn't figure out how to get the properties as readonly without doing some expensive reflection and the such.

Oh, and I'm really trying to avoid creating a second version of the class that is all readonly properties. At that point, I might as well return the clone.

Edit
Report

1 Answer

1

There is not a way to make all the properties of your object readonly externally from the class. In your example above, you cannot make the _manager properties readonly, unless you changed the properties within the Person class to be readonly.

You can make the setter of properties of the Person class internal, meaning that only classes within the same assembly as Person can change the properties.

Or, if you make the setter of the properties private, then only code within Person can change the values of the properties.

answered 2010-08-23T17:47:13.060

Your Answer