2016-09-08 1 views
3

möchte ich fragen, ob es einen Unterschied zwischenVerwendung von [in, out] in Methoden

public int Method1([In, Out] byte[] buffer); 

und

public int Method2(byte[] buffer); 

ich über http://referencesource.microsoft.com/#mscorlib/system/io/stream.cs,739 kam und sich fragen, warum [In, Out] ist da?

+2

Dieser Code ist sehr, sehr alt und fast sicher geschrieben, bevor der Pinvoke Marshaller getan wurde. Das hat eine ganze Weile gedauert, aber sie haben enorme Ressourcen für die Optimierung aufgewendet. Gute Chancen, dass [Out] notwendig war, wenn der pinvoke Marshaller noch nicht mit blitable Typen umgehen konnte. Oder der Programmierer hat es einfach eingefügt, weil es nie falsch ist, explizit darüber zu sein. Sie müssen den Microsoft-Programmierer finden, der an diesem 17+ Jahren arbeitete, um eine völlig zuverlässige Antwort zu erhalten. Sie sind sehr schwer zu finden. –

Antwort

-1

Ja. Es gibt Unterschiede.

  • public int Method2(byte[] buffer); verwendet implizite In:

    Zeigt an, dass Daten vom Anrufer zum Angerufenen gemarshallt werden sollen, aber mit dem Anrufer nicht zurück.

  • public int Method2(out byte[] buffer); verwendet Out:

    Zeigt an, dass Daten vom Angerufenen zurück zu Anrufer gemarshallt werden sollen.

  • public int Method2(ref byte[] buffer); verwendet [In, Out].
+2

Nein, sie sind nicht gleichwertig. Die Verwendung von "[In, Out]" ersetzt nicht die Verwendung von "Ref". –

+0

@reproduktor könnten Sie bitte erklären? – Ondrej

+0

Nach [msdn] (https://msdn.microsoft.com/en-us/library/77e6taeh (v = vs.100) .aspx) 'ref' wird in' [in/out] 'übersetzt. – Ondrej

Verwandte Themen