【发布时间】:2010-08-23 17:42:13
【问题描述】:
有没有办法返回一个对象的只读实例?
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!
}
}
是通过返回 Clone() 来做到这一点的唯一方法,以便对 Clone 而不是对原始版本进行任何更改?我知道对于数组,有一个函数可以将数组作为只读返回。哦,我知道这是一个引用类型……我还想知道是否有一些隐藏的 C# 功能可以锁定写作部分。
我试图想出一个通用的 ReadOnly 包装类,但不知道如何在不进行一些昂贵的反射等的情况下将属性设为只读。
哦,我真的想避免创建所有只读属性的类的第二个版本。到时候我还不如把克隆还给我。
【问题讨论】:
-
基于 cmets:是否有任何已知的快速高效的“ReadOnly”通用包装类?我尝试制作的必须使用反射,如果可以避免的话,这并不是我真正想做的。
标签: c# object readonly reference-type