Wenn eine Methode mit einem out-Parameter definiert wird, muss ich das out-Schlüsselwort beim Aufruf angeben. Es ist bereits dort in der Methodendefinition und die Laufzeit sollte wissen, dass jeder übergebene Parameter ein out-Parameter sein wird.
Es würde Sinn machen, wenn der Compiler das Argument mit oder ohne out-Schlüsselwort mit unterschiedlicher Semantik akzeptiert, aber wenn Sie das Schlüsselwort hinzufügen müssen, um den Code kompilieren zu lassen, was ist das? Sollte der Compiler das nicht automatisch behandeln?
Gleiches gilt für ref
Vielleicht weil C # Ihnen erlaubt, Überladungen wie folgt zu schreiben:
%Vor% In diesem Fall können Compiles nicht verstehen, dass die Methode mit keywork out
aufgerufen werden soll, wenn Sie dieses Schlüsselwort beim Aufruf der Methode nicht schreiben. Und generell sollten Sie out
schreiben, wenn die Methode mit diesem keyworrd deklariert wird.
Und natürlich, wenn Sie out
schreiben, wenn Sie Methode aufrufen, wissen Sie auf jeden Fall, dass diese Variable in der Methode geändert werden kann. Es ist sehr gut lesbar.
Diese Anforderung ist nicht um des Compilers willen. f (x, out y)
informiert sofort denjenigen, der den Code liest, dass y
überschrieben wird, nachdem f
zurückkehrt, ohne die Definition von f
nachschlagen zu müssen, um die mentalen CPU-Zyklen zu speichern.
Das ist ein guter Punkt, vielleicht hat es etwas mit Lesbarkeit zu tun. nehmen wir an, wir haben eine Methode mit zwei Parametern, wie zB
%Vor%ohne den Out-Parameter angeben zu müssen, nur ein einfacher Blick auf jemanden, der diese Methode aufruft, würde sie nicht vervollständigen.
Wenn Sie eine Methode mit out
keyword aufrufen, weiß Ihr Aufrufcode sicher, dass er als Referenz übergeben wird. In einigen Fällen können Sie auf eine Methode in einer Bibliothek von Drittanbietern treffen, die zu diesem Zeitpunkt out
Schlüsselwort in der Definition hat, wenn Sie diese Methode aufrufen. Sie wissen nicht, ob das Argument als Referenz oder Wert übergeben wird. Sie müssen also in der aufrufenden Methode out
für readabilty verwenden.