Mam wciąż wątpliwości dotyczące object
. Jest to podstawowa klasa wszystkiego, każda klasa. Ale czy jest to typ odniesienia lub typ wartości. Lub, które z tych działań to? Muszę to wyjaśnić. Mam trudności ze zrozumieniem tego.Czy obiekt jest typem odniesienia lub typem wartości?
object obj1 = "OldString";
object obj2 = obj1;
obj1 = "NewString";
MessageBox.Show(obj1 + " " + obj2);
//Output is "NewString OldString"
W tym przypadku działa jak typ wartości. Jeśli obiekt był typ referencyjny to dlaczego wartość obj2 jest nadal „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"
W tym przypadku działa jak rodzaj odniesienia
Możemy wywnioskować, że typ object
„s jest to, co w środku pola. Może to być zarówno typ referencyjny, jak i rodzaj wartości. Chodzi o to, co masz w środku. Czy mam rację?
wykorzystujące ciąg jako przykład jest bardzo zły pomysł. ciąg jest odniesieniem, ale jest także niezmienny. Tworząc nowy, najpierw przegląda pulę łańcuchów, aby zobaczyć, czy taki ciąg już istnieje. string jest przypadkiem nadzwyczajnym, nie używaj go do wyjaśniania pojęć związanych z typami referencyjnymi i wartościowymi. – Markus
"Kiedy tworzysz nowy, najpierw przegląda pulę napisów, aby sprawdzić, czy taki ciąg już istnieje." - to ... nie prawda. Sprawdzi to * w niektórych przypadkach *, ale nie w ogólnym przypadku. Co do tego, dlaczego użyłem napisu w pierwszej kolejności: * ponieważ pytanie dotyczyło właśnie łańcucha *. –