Sie müssen überlegen, was passiert, wenn die partielle Methode nicht implementiert ist.
Was passiert dann ist, dass alle Aufrufe an die Methode nur ausgezogen werden, als ob sie nie passiert wäre.
Also für ein Verfahren unter Verwendung, wäre es wie folgt aussehen:
stream s;
GetStream(out s);
s.Write(...);
und kompiliert werden, als ob es sagte dazu:
stream s;
s.Write(...);
Dieser Code ist nicht erlaubt, weil s
nicht gewesen initialisiert. Die Garantie, dass die Variable zu dem Zeitpunkt initialisiert wird, an dem Sie versuchen, die Methode Write
aufzurufen, wurde mit dem Aufruf an GetStream
verknüpft.
Dasselbe gilt für Methoden, die Daten zurückgeben. Da der gesamte Methodenaufruf nur dann nicht kompiliert wird, wenn Sie die partielle Methode nicht implementiert haben, müssen Sie überlegen, was Sie tun können und was nicht, und den Code, der sie aufruft, unverändert lassen. In Bezug auf out
und Rückgabewerte hat es die Möglichkeit, den aufrufenden Code ungültig oder unvollständig zu lassen, so dass es nicht erlaubt ist.
Was ref
, das ist gültig, da die Initialisierung Pflege durch den anrufenden Code genommen wurde:
stream s = null;
GetStream(ref s); // may be stripped out
if (s != null)
s.Write(...);
Gut erklärt! – AlwaysAProgrammer