Ich habe ein Projekt in c #, das ein anderes Projekt nutzt, das in vb.net geschrieben wurde. Ich bin derzeit in der Lage, beide zu ändern.
Ich habe eine Methode im VB-Projekt wie:
%Vor%Ich kann diese Methode nicht mit dem Schlüsselwort out aus C # aufrufen:
%Vor%Sollte das Schlüsselwort ByRef in VB.Net nicht die Funktionen "ref" und "out" enthalten?
Sollte ich einfach mit ref gehen?
Zur Laufzeit ref
und out
sind ziemlich austauschbar, da sie beide nur eine Referenz übergeben. Allerdings wird out
in der IL ein zusätzliches Attribut vorangestellt:
wird zu
%Vor% wodurch der C # -Compiler die beiden und unterscheiden kann, indem er die spezielle Semantik hinzufügt, die out
hat, nämlich dass ein out
-Parameter keinen zugewiesenen Wert haben muss, bevor er die Methode und ausführt muss vor dem Beenden der Methode ein Wert zugewiesen werden.
Im Gegensatz dazu liefert ByRef
in VB nur ref
, aber nicht die zusätzliche Semantik von out
. Dort gibt es kein Äquivalent von out
in VB.
Wie in meinem Frage und Antwort Sie können angeben <Out()>
attibute für die Parameterdefinition. Obwohl VB sie ignoriert, behandelt C # das Argument korrekt.
Es gibt kein Äquivalent von out
in VB (meines Wissens nach). Nur ByRef
ist ein Äquivalent von ref
, also wäre das die richtige Wahl.
Da Sie durch übergeben werden, erhält die aufgerufene Funktion Ihren Wert und Sie müssen den Parameter so initialisieren, dass er eine Adresse im Speicher hat.
BEARBEITEN:
Da du beide bearbeiten kannst, ändere das Sub
in ein Function
und werde los
von dem Problem insgesamt und, IMO, machen Sie Ihren Code auch netter.
Gehe mit ref
- es ist das C # -Äquivalent für VB ByRef
.
ABER Lesen Sie diese detaillierte Erklärung: Wann ref vs verwenden .
Tags und Links c# vb.net parameters out