C# Language Changer les valeurs ailleurs


Exemple

public static void Main(string[] args)
{
    var studentList = new List<Student>();
    studentList.Add(new Student("Scott", "Nuke"));
    studentList.Add(new Student("Vincent", "King"));
    studentList.Add(new Student("Craig", "Bertt"));

    // make a separate list to print out later
    var printingList = studentList; // this is a new list object, but holding the same student objects inside it

    // oops, we've noticed typos in the names, so we fix those
    studentList[0].LastName = "Duke";
    studentList[1].LastName = "Kong";
    studentList[2].LastName = "Brett";

    // okay, we now print the list
    PrintPrintingList(printingList);
}

private static void PrintPrintingList(List<Student> students)
{
    foreach (Student student in students)
    {
        Console.WriteLine(string.Format("{0} {1}", student.FirstName, student.LastName));
    }
}

Vous remarquerez que même si la liste printingList a été créée avant les corrections apportées aux noms d'élèves après les fautes de frappe, la méthode PrintPrintingList affiche toujours les noms corrigés:

Scott Duke
Vincent Kong
Craig Brett

En effet, les deux listes contiennent une liste de références aux mêmes étudiants. SO modifier l'objet objet sous-jacent propage aux utilisations par l'une ou l'autre liste.

Voici à quoi ressemblerait la classe d'élèves.

public class Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Student(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }
}