Почему я могу это сделать? Это ошибка?Изменение поля строки только для чтения
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
- это поле только для чтения.
Есть ли проблема с безопасностью?
Является ли управляемая модель небезопасной?
Могу ли я внести изменения из спутниковых библиотек, которые могут привести к краху основного процесса?
Есть причина, по которым ключевое слово называется "unsafe" – Dispersia
Что вы хотите изменить? Вы достигаете памяти и изменяете ее таким образом, чтобы не заботиться о readonly-ness. – byxor
Я не смущен. Я понимаю, что я обращаюсь к памяти с указателями. По-моему, мне кажется ошибка дизайна и концепция рамки. Я просто подумал, что readonly были созданы в защищенной или контролируемой части памяти. На самом деле слово «небезопасно» помещается в код, который делает небезопасное, что сбивает с толку. Readonly должен быть только для чтения и небезопасным, должен выпускать мои собственные данные и не позволять мне изменять данные кода, которые НЕ отмечены как «небезопасные» – jmmcba