Я читал код, который заставил меня остановиться на какой-то строке:
List<object> props = new List<object>();
DoWork(param1, param2, props);
//props.Count grew up
Я думал, что изменение переменной за пределами ее области действия требует передачи ее как out
или ref
, но потом я понял, что если только метод DoWork
не изменит ссылку props
, например:
props = new List<object>();
ссылка будет указывать на то же место. Так что здесь нет необходимости использовать ref
.
а затем я создал метод для типа string
:
static void ChangeMe(string str)
{
str = "W77";
}
public static void Main(string[] args)
{
string str = "p1";
ChangeMe(str);
//str is still "p1"
}
Если поведение, побуждающее List быть измененным за пределами его области, заключается в том, что это ссылочный тип, почему string
не изменяется, если он не перераспределяется в вызываемом методе и является ссылочным типом, таким как List<object>
?