Gibt es eine Möglichkeit, eine schreibgeschützte Instanz eines Objekts zurückzugeben?C# readonly Objekt
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!
}
}
ist der einzige Weg, dies zu tun durch einen Klon Rückkehr(), so dass Änderungen an der Klon und das Original nicht fertig sind? Ich weiß für Arrays gibt es eine Funktion, um das Array als schreibgeschützt zurückzugeben. Oh, und ich weiß, dass dies ein Referenztyp ist ... Ich frage mich außerdem, ob es eine versteckte C# -Funktion gibt, um den Schreibbereich zu sperren.
Ich habe versucht, mit einer Generic ReadOnly-Wrapper-Klasse zu kommen, konnte aber nicht herausfinden, wie man die Eigenschaften als readonly bekommt, ohne eine teure Reflexion und dergleichen zu machen.
Oh, und ich versuche wirklich zu vermeiden, eine zweite Version der Klasse, die alle Readonly-Eigenschaften ist, zu erstellen. An diesem Punkt könnte ich den Klon auch zurückgeben.
Basierend auf den Kommentaren: Gibt es eine bekannte „Readonly“ generic-Wrapper-Klasse, die schnell und effizient? Derjenige, den ich zu machen versuchte, musste Reflexion verwenden, was ich nicht wirklich tun möchte, wenn ich es vermeiden kann. –