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#)
Mise à jour : novembre 2007
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
Concepts
Référence
Classes (Guide de programmation C#)