Где изменчивость?Прямо здесь:
someClassInstance.SomeName = "Now This is much more than a name";
someClassInstance.RelatedNames = new List<string>(100} { "N","o","w".....};
Вы просто мутировали объект, на который указывает someClassInstance
.
Кроме того, ваш пример немного надуманный.String
действительно неизменны, но List
нет, так что вы могли бы сделать это:
someClassInstance.RelatedNames.Add("HELLO!");
И тогда вы просто мутировали объект, на который указывает someClassInstance.RelatedNames
.
РЕДАКТИРОВАТЬ: я вижу, вы изменили свой вопрос.Ну, тогда:
- someClassInstance.SomeName переместит свой указатель на другую строку внутри кучи
- someClassInstance.RealtedNames переместит свой указатель на другой список <> (101) внутрикуча.
1
верно, потому что String
было , предназначено , чтобы быть неизменным.Вот почему есть класс StringBuilder
на тот случай, если вам нужна изменяемая строка.
2
- false, потому что это не так, как реализован List
.Возможно, отсюда и твоя путаница.Тем не менее, когда вы вызываете AddRange
, someClassInstance.RelatedNames
все равно будет указывать на тот же экземпляр, но внутреннее состояние этого экземпляра будет изменено (скорее всего, его резервный массив будет изменен, чтобы указывать на другой объект массива, и его счетчиктеперь будет 101
).Фактически, ссылка не может волшебным образом изменяться в зависимости от операций, которые вызываются для объекта, на который она ссылается.
И ничто из этого не меняет того факта, что внутреннее состояние someClassInstance
было изменено в любом случае.