Referenztyp vs Werttyp [duplizieren]

Diese Frage hat hier bereits eine Antwort:

C # String Referenztyp? 10 Antworten

Ich lese über Strukturen und Klassen in C # und verstehe, dass Strukturen Werttypen und Klassen Referenztypen sind. Aber ich bin ein wenig verwirrt darüber, wie sich Klassenobjekte verhalten, wenn sie als Parameter an eine Methode übergeben werden.

Angenommen, ich habe den folgenden Code:

public class Program
{
    public static void Main(string[] args)
    {
        var program = new Program();
        var person = new Person
        {
            Firstname = "Bob",
        };

        Console.WriteLine(person.Firstname);
        program.ChangeName(person);
        Console.WriteLine(person.Firstname);
        program.Kill(person);
        Console.WriteLine(person.Firstname);
        Console.Read();
    }

    public void ChangeName(Person p)
    {
        p.Firstname = "Alice";
    }

    public void Kill(Person p)
    {
        p = null;
    }
}

Wenn ich meine Instanz des @ übergebPerson Klasse zuProgram.ChangeName() und ändere den Wert vonperson.Firstname zuAlice, die Änderung wirkt sich auf das ursprüngliche Personenobjekt aus, wie in meinem @ instanziierProgram.Main() das ist, was ich erwarten würde, diep Parameter ist ein Verweis aufperson. Wenn ich jedoch versuche, @ einzustellp zunull, es scheint keine Änderung zu geben. Warum ist das

Antworten auf die Frage(2)

Ihre Antwort auf die Frage