Вот как прошло мое последнее интервью:
Вопрос: Где хранятся строки?
Ответ: Куча, так как это ссылочный тип
Вопрос: Объясните мне следующий код:
static void Main(string[] args)
{
string one = "test";
string two = one;
one = one + " string";
Console.WriteLine("One is {0}" , one);
Console.WriteLine("Two is {0}", two);
}
Ответ: Нарисуйте две диаграммы, как показано ниже:
(представляет собой оператор string two = one;
(представляет оператор, one = one + " string";
. Новая цепочка создается в куче и назначается)
Вопрос: Правильно. Нарисуйте аналогичный фрагмент кода ниже:
class Program
{
static void Main(string[] args)
{
Test one = new Test { someString = "test" };
Test two = one;
one.someString = "test String";
Console.WriteLine("One is {0}", one.someString);
Console.WriteLine("Two is {0}", two.someString);
}
}
class Test
{
public string someString { get; set; }
}
Ответ:
[Test two = one
]
one.someString = "test String";
Вопрос: Хорошо. Вы сказали, что оба strings
и classes
являются ссылочными типами. Тогда почему был создан новый объект для строки и назначен значение, тогда как для класса изменилось существующее свойство строки?
Ответ:. Поскольку строки являются неизменяемыми, тогда как классы изменяемы.
(Несмотря на то, что я очистил интервью, я все еще не понял этого поведения. Почему дизайнеры класса сделали его изменчивым, сохраняя неизменяемые строки? Во всем мире есть много разных ответов, но может ли кто-нибудь сделать это простым, объяснив это конкретное поведение с приведенным выше кодом?)