Dies ist eine Folgefrage zu dieser anderen Frage.
Hintergrund
Beim Arbeiten mit dem MSDN Delegates Tutorial (C #) sehe ich Folgendes:
Beachten Sie, dass sich die Methode, der er zugeordnet ist, nach dem Erstellen eines Delegaten nie ändert - Delegatenobjekte sind unveränderlich.
Und dann sehe ich im Codebeispiel Folgendes (ein wenig über den Code verteilen):
public delegate void ProcessBookDelegate(Book book);
bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));
bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(totaller.AddBookToTotal));
Die Frage
Bei der Art und Weise, wie der Code hier geschrieben wird, wird für jeden Prozess ein neuer Delegat erstellt. Ich vermute, die Unveränderlichkeit ist relevant, wenn Sie versuchen, Dinge wie zu tun
ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle);
ProcessBookDelegate thisIsATest = new ProcessBookDelegate(totaller.AddBookToTotal);
was soll ... noch kompilieren wann thisIsATest
ist unveränderlich? Welches Problem hat Microsoft gelöst, indem es unveränderlich gemacht wurde? Auf welche Probleme würden wir stoßen, wenn C # 6 die Delegierten veränderlich machen würde?
BEARBEITEN
Ich glaube, die Unveränderlichkeit wird dies verhindern:
ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle);
thisIsATest.ChangeTheDelegateInABadFashion();
someFunction(thisIsATest); //This function works as normal
//because the delegate is unchanged
//due to immutability
aber die Unveränderlichkeit wird dies NICHT verhindern:
ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle);
thisIsATest = new ProcessBookDelegate(ChangeTheDelegateInABadFashion());
someFunction(thisIsATest); //This function works weird now because
//it expected the unchanged delegate
Bin ich in diesem Verständnis richtig?
Func<int>
1 das erste zurückgibt Mal heißt es, 2 die Sekunde usw. - dies verhält sich im Wesentlichen wie ein veränderliches Objekt.