Informazioni su RefAbout Ref

Breve descrizioneShort description

Viene descritto come creare e utilizzare una variabile di tipo riferimento.Describes how to create and use a reference type variable. È possibile utilizzare le variabili di tipo riferimento per consentire a una funzione di modificare il valore di una variabile passata.You can use reference type variables to permit a function to change the value of a variable that is passed to it.

Descrizione lungaLong description

È possibile passare le variabili alle funzioni per riferimento o per valore.You can pass variables to functions by reference or by value.

Quando si passa una variabile per valore , si passa una copia dei dati.When you pass a variable by value , you are passing a copy of the data.

Nell'esempio seguente la funzione modifica il valore della variabile passata.In the following example, the function changes the value of the variable passed to it. In PowerShell, i numeri interi sono tipi di valore, quindi vengono passati per valore.In PowerShell, integers are value types so they are passed by value. Il valore di non $var viene pertanto modificato al di fuori dell'ambito della funzione.Therefore, the value of $var is unchanged outside the scope of the function.

Function Test($data)
{
    $data = 3
}

$var = 10
Test -data $var
$var
10

Nell'esempio seguente una variabile che contiene un oggetto Hashtable viene passata a una funzione.In the following example, a variable containing a Hashtable is passed to a function. Hashtable è un tipo di oggetto pertanto, per impostazione predefinita, viene passato alla funzione per riferimento.Hashtable is an object type so by default it is passed to the function by reference.

Quando si passa una variabile per riferimento , la funzione può modificare i dati e la modifica viene mantenute dopo l'esecuzione della funzione.When passing a variable by reference , the function can change the data and that change persists after the function executes.

Function Test($data)
{
    $data.Test = "New Text"
}

$var = @{}
Test -data $var
$var
Name                           Value
----                           -----
Test                           New Text

La funzione aggiunge una nuova coppia chiave-valore che viene mantenute al di fuori dell'ambito della funzione.The function adds a new key-value pair that persists outside of the function's scope.

Scrittura di funzioni per accettare parametri di riferimentoWriting functions to accept reference parameters

È possibile codificare le funzioni in modo che consideri un parametro come riferimento, indipendentemente dal tipo di dati passati.You can code your functions to take a parameter as a reference, regardless of the type of data passed. A tale scopo, è necessario specificare il tipo di parametri come System.Management.Automation.PSReference , o [ref] .This requires that you specify the parameters type as System.Management.Automation.PSReference, or [ref].

Quando si utilizzano i riferimenti, è necessario utilizzare la Value proprietà del System.Management.Automation.PSReference tipo per accedere ai dati.When using references, you must use the Value property of the System.Management.Automation.PSReference type to access your data.

Function Test([ref]$data)
{
    $data.Value = 3
}

Per passare una variabile a un parametro che prevede un riferimento, è necessario digitare il cast della variabile come riferimento.To pass a variable to a parameter that expects a reference, you must type cast your variable as a reference.

Nota

Sono necessarie le parentesi quadre e le parentesi.The brackets and parenthesis are BOTH required.

$var = 10
Test -data ([ref]$var)
$var
3

Passaggio di riferimenti a metodi .NETPassing references to .NET methods

Per alcuni metodi .NET può essere necessario passare una variabile come riferimento.Some .NET methods may require you to pass a variable as a reference. Quando la definizione del metodo usa le parole chiave in , out o ref su un parametro, prevede un riferimento.When the method's definition uses the keywords in, out, or ref on a parameter, it expects a reference.

[int] | Get-Member -Static -Name TryParse
Name     MemberType Definition
----     ---------- ----------
TryParse Method     static bool TryParse(string s, [ref] int result)

Il TryParse metodo tenta di analizzare una stringa come Integer.The TryParse method attempts to parse a string as an integer. Se il metodo ha esito positivo, restituisce $true e il risultato viene archiviato nella variabile passata per riferimento.If the method succeeds, it returns $true, and the result is stored in the variable you passed by reference.

PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15

Riferimenti e ambitiReferences and scopes

I riferimenti consentono di modificare il valore di una variabile nell'ambito padre all'interno di un ambito figlio.References allow the value of a variable in the parent scope to be changed within a child scope.

# Create a value type variable.
$i = 0
# Create a reference type variable.
$iRef = [ref]0
# Invoke a scriptblock to attempt to change both values.
&{$i++;$iRef.Value++}
# Output the results.
"`$i = $i;`$iRef = $($iRef.Value)"
$i = 0;$iRef = 1

È stata modificata solo la variabile del tipo di riferimento.Only the reference type's variable was changed.

Vedere ancheSee also

about_Variablesabout_Variables

about_Environment_Variablesabout_Environment_Variables

about_Functionsabout_Functions

about_Script_Blocksabout_Script_Blocks

about_Scopesabout_Scopes