Debe considerar lo que sucede si el método parcial no se implementa.
Lo que ocurre entonces es que todas las llamadas al método simplemente se eliminan como si nunca hubieran sucedido.
Así, por un método que utiliza cabo, se vería así:
stream s;
GetStream(out s);
s.Write(...);
y compilarse como si se dijo lo siguiente:
stream s;
s.Write(...);
Este código no está permitido porque s
no ha sido inicializado La garantía de que la variable se inicializaría cuando intentas llamar al método Write
estaba vinculada con la llamada al GetStream
.
Lo mismo ocurre con los métodos de devolución de datos. Dado que la llamada al método completo simplemente no se compila si no ha implementado el método parcial, debe considerar lo que puede y no puede hacer y aún así dejar el código que lo llama válido. En términos de out
y valores devueltos, tiene el potencial de dejar el código de llamada inválido o incompleto, por lo que no está permitido.
En cuanto a ref
, esto es válido, ya que la inicialización ha sido cuidado por el código de llamada:
stream s = null;
GetStream(ref s); // may be stripped out
if (s != null)
s.Write(...);
¡Bien explicado! – AlwaysAProgrammer