Se si tratta di un oggetto statico, è meglio usare ref come argomento del metodo?

0

Ho una "connessione" oggetto che contiene il percorso / le credenziali di un DB SQL.

Quando si chiamano i metodi; di solito lo facciamo:

Connection con = new Connection();

GetSalesData(con);


public static void (Connection con)
{
   // Run code

}

Come ho capito, abbiamo appena creato due istanze di connessione, quindi questo significa due allocazioni di memoria. È meglio fare questo:

Connection con = new Connection();

GetSalesData(ref con);


public static void (ref Connection con)
{
   // Run code

}
    
posta Martin Ward 24.10.2015 - 11:22
fonte

2 risposte

2

As I understand, we just created two instance of connection

No, non l'abbiamo fatto. Il passaggio di una variabile funziona automaticamente come pass-by-reference per i tipi di riferimento e pass-by-value per i tipi di valore. Dato che la tua connessione è una classe , significa che è un tipo di riferimento e solo un riferimento verrà passato al metodo. Non hai mai creato una seconda istanza della tua connessione.

Questo non ha nulla a che fare con il modificatore statico, né sulla variabile, né sul metodo.

Ti suggerisco di passare un po 'di tempo a leggere MSDN su questo argomento , in particolare i due collegamenti denominati Passing Parametri di tipo di riferimento e Passaggio dei parametri di tipo valore .

Inoltre, come osservato da un altro commentatore, potresti leggere l'eccellente Jon Skeet sui parametri .

    
risposta data 24.10.2015 - 11:32
fonte
2

Quando usi:

public static void GetSalesData (Connection con)

stai passando un riferimento all'oggetto Connection come valore. Come tale, puoi accedere a quell'oggetto tramite con . Non stai creando una seconda copia dell'oggetto Connection .

Usa:

public static void GetSalesData (ref Connection con)

stai passando un riferimento alla posizione di memoria che a sua volta fa riferimento all'oggetto Connection . Ciò ti consente di modificare ciò che si trova in quella posizione di memoria, ovvero puoi modificare con nello snippet di codice:

Connection con = new Connection();
GetSalesData(con);

si riferisce a. È estremamente improbabile che tu voglia farlo.

    
risposta data 24.10.2015 - 11:33
fonte

Leggi altre domande sui tag