title: c# readonly object
body: <p>Is there any way to return a readonly instance of an object?</p>
  
  <pre><code>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!
      }
  }
  </code></pre>
  
  <p>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.</p>
  
  <p>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.</p>
  
  <p>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.</p>