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

C#-Programmierhandbuch

Referenz

Klassen (C#-Programmierhandbuch)

Strukturen (C#-Programmierhandbuch)

Übergeben von Parametern (C#-Programmierhandbuch)