Questa è una domanda successiva a questa altra domanda.
Sfondo
Lavorando dal tutorial sui delegati MSDN (C #) , Vedo il seguente:
Note that once a delegate is created, the method it is associated with never changes — delegate objects are immutable.
E poi, nel codice di esempio, vedo questo (Spiega un po 'il codice):
public delegate void ProcessBookDelegate(Book book);
bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));
bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(totaller.AddBookToTotal));
La domanda
Ora ovviamente, il modo in cui il codice è scritto qui crea un nuovo delegato per ciascuno processi. Sto indovinando che l'immutabilità è pertinente se provi a fare cose del tipo
ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle);
ProcessBookDelegate thisIsATest = new ProcessBookDelegate(totaller.AddBookToTotal);
che dovrebbe ... essere ancora compilato quando thisIsATest
è immutabile? Quindi, quale problema ha risolto Microsoft rendendolo immutabile? Quali problemi dovremmo incontrare se C # 6 rendesse mutabili i delegati?
Modifica
Credo che l'immutabilità impedirà questo:
ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle);
thisIsATest.ChangeTheDelegateInABadFashion();
someFunction(thisIsATest); //This function works as normal
//because the delegate is unchanged
//due to immutability
ma l'immutabilità NON lo impedirà:
ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle);
thisIsATest = new ProcessBookDelegate(ChangeTheDelegateInABadFashion());
someFunction(thisIsATest); //This function works weird now because
//it expected the unchanged delegate
Sono corretto in questa comprensione?