2016-12-09 4 views
0

Почему я могу это сделать? Это ошибка?Изменение поля строки только для чтения

Debug.WriteLine (System.Boolean.FalseString); // output: "False" 

fixed (char* xx = System.Boolean.FalseString) { 
    xx[1] = 'X'; 
} 

Debug.WriteLine (System.Boolean.FalseString); // output: "FXlse" 

Тогда FalseString имеет новое значение.

Я не знаю, является ли ошибка, потому что FalseString - это поле только для чтения.

Есть ли проблема с безопасностью?

Является ли управляемая модель небезопасной?

Могу ли я внести изменения из спутниковых библиотек, которые могут привести к краху основного процесса?

+4

Есть причина, по которым ключевое слово называется "unsafe" – Dispersia

+1

Что вы хотите изменить? Вы достигаете памяти и изменяете ее таким образом, чтобы не заботиться о readonly-ness. – byxor

+0

Я не смущен. Я понимаю, что я обращаюсь к памяти с указателями. По-моему, мне кажется ошибка дизайна и концепция рамки. Я просто подумал, что readonly были созданы в защищенной или контролируемой части памяти. На самом деле слово «небезопасно» помещается в код, который делает небезопасное, что сбивает с толку. Readonly должен быть только для чтения и небезопасным, должен выпускать мои собственные данные и не позволять мне изменять данные кода, которые НЕ отмечены как «небезопасные» – jmmcba

ответ

Смежные вопросы