2016-03-31 13 views
1

ich einen Speicher-Stream wie folgt bin mit:C# - Auswirkung des zurückkehrenden Bytearrays des Speicherstroms unmittelbar vor der Ausgabe des Streams?

public static byte[] myMethod() 
{ 
    using(MemoryStream stream = new MemoryStream()) 
    { 
     //some processing here. 
     return stream.toArray(); 
    } 
} 

ich das zurückgegebene Byte-Array in der Anrufer Methode wie folgt bin Zuordnung:

public static void callerMethod() 
{ 
    byte[] myData = myMethod(); 
    //Some processing on data array here 
} 

Ist das zurückgegebene Byte-Array als Referenz oder als Wert übergeben ? Wenn das zurückgegebene Array von Referenz bedeutet, dass jederzeit kann ich myData im callerMethod Array null jederzeit zu sein, während ich immer noch die Datenverarbeitung bin?

+1

Wie sollte sich das Byte-Array ändern, während Sie noch arbeiten? Wenn es noch nicht zugewiesen ist, wie kann es sich ändern? –

+0

Sie fragen, ob das Array Null wird, nachdem der Stream entfernt wurde? Das wird nicht passieren. – Camo

+0

Es wird zugewiesen, indem myMethod() aufgerufen wird, ich denke, es wird geändert, wenn das Byte-Array als Verweis zurückgegeben wird, da das Speicher-Stream-Objekt jetzt ein Thema für GC jederzeit nach der Ausführung mit block in der aufgerufenen Methode wird? –

Antwort

3

Wird das zurückgegebene Byte-Array als Referenz oder Wert übergeben?

Ein Array ist eine Instanz einer Array Klasse, es ist also immer eine Referenz und kein Wert. ToArray liest die Werte aus dem Stream und speichert sie in einem neu instanziierten Array-Objekt.

ist, dass jederzeit meine ich haben kann ... null

Nr Wie oben erläutert, ein neues Array-Instanz, die die Werte lesen aus dem Strom enthalten. Es besteht keine Chance, dass Ihre lokale Variable myData wieder auf null gesetzt wird, während Sie damit arbeiten.

0

Dies wird eine Referenz sein, aber Ihre Daten werden irgendwo in Ihrem Speicher gespeichert. Wenn "myMethod" zurückkehrt, wird der Stream geschlossen, aber das Array enthält weiterhin die Daten. Die einzige Möglichkeit, die Array NULL sein könnte, wäre, dass Ihr Stream keine Daten enthält.