Я использовал отражение для проверки содержимого System.Int32
и обнаружил, что оно содержит еще одно System.Int32
.
System.Int32 m_value;
Я не понимаю, как это возможно.
Этот int
действительно является "целым числом поддержки" того, что у вас есть: если вы пометите int
и используете отражение, чтобы изменить значение его поля m_value
, вы фактически измените значение целого числа:
object testInt = 4;
Console.WriteLine(testInt); // yields 4
typeof(System.Int32)
.GetField("m_value", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(testInt, 5);
Console.WriteLine(testInt); // yields 5
За этой особенностью должно быть рациональное объяснение. Как тип значения может содержать себя? Какую магию использует CLR, чтобы заставить это работать?