Partager via


Comment : différencier le passage d'un struct et le passage d'une référence de classe à une méthode (Guide de programmation C#)

Cet exemple explique que, lorsqu'un struct est passé à une méthode, une copie du struct est passée, mais lorsqu'une instance de classe est passée, une référence est passée.

Le résultat obtenu avec l'exemple de code suivant montre que seule la valeur du premier champ de classe a changé lorsque l'instance de classe est transmise à la méthode ClassTaker. Le champ de structure, lui, ne change pas lors de la transmission de son instance à la méthode StructTaker. Cela s'explique de la façon suivante : une copie de la structure est transmise à la méthode StructTaker, tandis qu'une référence à la classe est transmise à la méthode ClassTaker.

Exemple

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
*/

Voir aussi

Référence

Classes (guide de programmation C#)

Structures (Guide de programmation C#)

Passage de paramètres (Guide de programmation C#)

Concepts

Guide de programmation C#