Las otras respuestas que indican que ha cambiado la firma de un método y, por lo tanto, deben recompilar a las personas que llaman, son correctas.Pensé que podría agregar algo de información adicional sobre este bit de su pregunta:
Me parece que, en todos los sitios de llamadas a este método, no se utilizó el valor de retorno (ya que no existía antes)
Eso es exactamente correcto. Ahora, considere esta pregunta: ¿cómo se escribe el código que no hace uso de los datos? Parece que está trabajando bajo la suposición completamente falsa de que que no utiliza un valor no requiere código, pero que no use un valor ¡ciertamente requiere código!
Suponga que tiene métodos:
static int M1(int y) { return y + 1; }
static void M2(int z) { ... }
y usted tiene una llamada
int x;
x = M1(123);
¿Qué ocurre a nivel de IL? lo siguiente:
- Asigne espacio en el grupo temporal para x.
- Empuje 123 en la pila
- Invoke M1.
- Presione 1 en la pila. Stack ahora es 1, 123
- Agregue las dos cosas principales en la pila. Esto aparece tanto y empuja el resultado. Stack es ahora 124.
- volver a la llamada
- La pila es todavía 124.
- tienda el valor en la pila en el almacenamiento temporal de x. Esto hace estallar la pila, por lo que la pila ahora está vacía.
Supongamos ahora tienes que hacer:
M1(345);
¿Qué ocurre? Lo mismo :
- empuje 345 en la pila
- invocación M1.
- Presione 1 en la pila. Stack ahora es 1, 345
- Agregue las dos cosas principales en la pila. Esto aparece tanto y empuja el resultado. Pila es ahora 346.
- volver a la llamada
- La pila es todavía 346.
Pero no hay instrucción que almacena el valor en la pila en cualquier lugar, así que tenemos que emitir una instrucción pop:
- Muestra el valor no utilizado de la pila.
Ahora supongamos que llame
M2(456);
¿Qué ocurre?
- empuje 456 en la pila
- invocación M2.
- M2 hace su trabajo. Cuando vuelve a la persona que llama, la pila está vacía porque no se devuelve.
- La pila ahora está vacía, así que no separe nada de ella.
¿Ahora ves por qué cambiar un método de vacío al regresar al valor devuelto es un cambio radical? Cada persona que llama ahora tiene que sacar el valor no utilizado de la pila. Al hacer nada con datos todavía es necesario limpiarlo de la pila. Estás desalineando la pila si no bajas ese valor; el CLR requiere que la pila sea vacía al comienzo de cada declaración para garantizar que este tipo de desalineación no ocurra.
Editado mi ejemplo. Mi punto era que el método devuelve algo ahora; pero todo el código que lo usó previamente no hace nada con eso. Es perfectamente legal escribir dicho código. –