Referenztyp vs Werttyp [duplizieren]
Diese Frage hat hier bereits eine Antwort:
C # String Referenztyp? 10 AntwortenIch 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