У меня есть сомнения относительно object
. Это первичный базовый класс, любой класс. Но это ссылочный тип или тип значения. Или как это происходит? Мне нужно выяснить это. Мне трудно понять это.Является ли объект ссылочным типом или типом значения?
object obj1 = "OldString";
object obj2 = obj1;
obj1 = "NewString";
MessageBox.Show(obj1 + " " + obj2);
//Output is "NewString OldString"
В этом случае он действует как тип значения. Если объект был ссылочный тип, то почему obj2 значение по-прежнему «OldString»
class SampleClass
{
public string Text { get; set; }
}
SampleClass Sample1 = new SampleClass();
Sample1.Text="OldText";
object refer1 = Sample1;
object refer2 = refer1;
Sample1.Text = "NewText";
MessageBox.Show((refer1 as SampleClass).Text + (refer2 as SampleClass).Text);
//OutPut is "NewText NewText"
В этом случае действует как ссылочный тип
Мы можем сделать вывод, что тип object
«s является то, что вы боксировать внутри него. Это может быть как ссылочный тип, так и тип значения. Речь идет о том, что вы внутри. Я прав?
используя строку в качестве примера супер плохая идея. строка является ссылкой, но также неизменной. Когда вы создаете новый, он сначала просматривает пул строк, чтобы увидеть, существует ли такая строка, как она уже существует. string - это особый случай, не используйте его для объяснения понятий вокруг ссылок и типов значений. – Markus
«Когда вы создаете новый, он сначала просматривает пул строк, чтобы увидеть, существует ли такая строка, как она уже существует». - Это ... не совсем так. Он будет проверять * некоторые случаи *, но не в общем случае. Что касается того, почему я использовал строку в первую очередь: * потому что в этом вопросе конкретно обсуждалась строка *. –