읽기 전용 목록을 만들려면 IReadOnlyList<T>
을 조사했습니다. 하지만 100 % 읽기 전용이 아닌 것 같습니다. 목록에서 항목을 추가/제거 할 수는 없지만 구성원을 수정할 수는 있습니다.수업을 진정으로 불변으로 만드는 방법?
이 예제를 고려하십시오.
class Program
{
static void Main(string[] args)
{
List<Test> list = new List<Test>();
list.Add(new Test() { MyProperty = 10 });
list.Add(new Test() { MyProperty = 20 });
IReadOnlyList<Test> myImmutableObj = list.AsReadOnly();
// I can modify the property which is part of read only list
myImmutableObj[0].MyProperty = 30;
}
}
public class Test
{
public int MyProperty { get; set; }
}
는 정말 읽기 전용 나는 같은 읽기 전용
MyProperty
을해야 확인하십시오. 이 클래스는 사용자 정의 클래스이므로 클래스를 수정할 수 있습니다. 내 목록이 getter & setter 속성이 모두 포함 된 inbuilt .net 클래스 인 경우 어떻게합니까? 이 경우 값을 읽을 수있는 .net 클래스의 래퍼를 작성해야한다고 생각합니다.
기존 클래스를 변경하지 못하게 할 수있는 방법이 있습니까?
목록 *은 * 변경할 수 없습니다. 얕은 불변성, 반면 당신은 깊은 불변성을 기대합니다. [Immunability의 종류] (http://blogs.msdn.com/b/ericlippert/archive/2007/11/13/immutability-in-c-part-one-kinds-of-immutability.aspx)를 참조하십시오. 다른 중요한 차이점. – delnan
나는 클래스를 ROM에 구운 다음 컴퓨터의 마더 보드에있는 PCIe 슬롯에 맞는 도터 보드에 소켓을 연결합니다. –
@delnan : 아니요. 실제로는 읽기 전용입니다. – SLaks