Gewusst wie: Unterschiede zwischen dem Übergeben einer Struktur und dem Übergeben eines Klassenverweises an eine Methode (C#-Programmierhandbuch)
Aktualisiert: November 2007
Dieses Beispiel verdeutlicht Folgendes: Wenn struct an eine Methode übergeben wird, wird eine Kopie der Struktur übergeben. Bei der Übergabe einer class-Instanz wird jedoch ein Verweis übergeben.
An der Ausgabe des folgenden Beispiels ist erkennbar, dass bei der Übergabe der class-Instanz an die ClassTaker-Methode lediglich der Wert des class-Felds geändert wurde. Das struct-Feld bleibt bei der Übergabe der Instanz an die StructTaker-Methode jedoch unverändert. Dies liegt daran, dass lediglich eine Kopie der Struktur an die StructTaker-Methode übergeben wurde, während an die ClassTaker-Methode ein Verweis auf die Klasse übergeben wurde.
Beispiel
class TheClass
{
public string willIChange;
}
struct TheStruct
{
public string willIChange;
}
class TestClassAndStruct
{
static void ClassTaker(TheClass c)
{
c.willIChange = "Changed";
}
static void StructTaker(TheStruct s)
{
s.willIChange = "Changed";
}
static void Main()
{
TheClass testClass = new TheClass();
TheStruct testStruct = new TheStruct();
testClass.willIChange = "Not Changed";
testStruct.willIChange = "Not Changed";
ClassTaker(testClass);
StructTaker(testStruct);
Console.WriteLine("Class field = {0}", testClass.willIChange);
Console.WriteLine("Struct field = {0}", testStruct.willIChange);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
Class field = Changed
Struct field = Not Changed
*/
Siehe auch
Konzepte
Referenz
Klassen (C#-Programmierhandbuch)