C # und VB.Net out-Parameter

7

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?

    
Matthew Grima 08.08.2011, 08:50
quelle

4 Antworten

14

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:

%Vor%

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.

    
Joey 08.08.2011, 09:02
quelle
4

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.

    
Mark Hurd 13.08.2011 13:56
quelle
2

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.

    
Jodrell 08.08.2011 08:55
quelle
2

Gehe mit ref - es ist das C # -Äquivalent für VB ByRef .

ABER Lesen Sie diese detaillierte Erklärung: Wann ref vs verwenden .

    
Ofer Zelig 08.08.2011 08:56
quelle

Tags und Links