과거 record나 {get; init;} 으로 초기화가능으로 자동선언한 프로퍼티가 winform 그리드에서 수정가능해지는 현상을 발견했었는데,
최근에서야 이게 리플렉션에서도 동일하게 적용되는 현상이며, 런타임에서는 아예 set과 init을 구분할 방법이 없는걸 알게됬다. (찾으면 알려주시기바랍니다.)
자동구현프로퍼티 뿐만 아니라 init 함수도 동일하게 set과 구분할수가 없다.
이게 코드상에서는 문제가 없는데 리플렉션으로 제네릭한 UI를 생성할때, init프로퍼티를 구분할 방법이 없다보니 수정을 의도하지 않는데
수정가능상태에 노출되버리는 문제가 생겻다.
클래스 프로퍼티는 internal로 숨기던가 속성을 부여할수라도 있지만, record로 생성된 프로퍼티는 어찌할 방도가 없다.
구글링에서의 혹자가 어차피 메모리의 값이 완벽히 불변하도록 보호하는것은 불가능함으로 그렇게 내비두는게 맞다는데,
누가 메모리단에서 Hack한거랑, 개발할때까진 수정하면 안되는정보였던걸 막상돌릴때는 구분없이 수정되도록 함수까지 대령해둔거랑 다르지 않나 싶다.
혹시 익명타입도 리플렉션으로 값수정이 되나 확인해봤는데 얘는 또 잘 막아둿다.
런타임에서의 리플렉션은 어차피 지양되는 방향이기에 특별한 조취가 없는것으로 보임