Acerca de refAbout Ref

Descripción breveShort description

Describe cómo crear y usar una variable de tipo de referencia.Describes how to create and use a reference type variable. Puede usar variables de tipo de referencia para permitir que una función cambie el valor de una variable que se le pasa.You can use reference type variables to permit a function to change the value of a variable that is passed to it.

Descripción largaLong description

Puede pasar variables a funciones por referencia o por valor.You can pass variables to functions by reference or by value.

Cuando se pasa una variable por valor , se pasa una copia de los datos.When you pass a variable by value , you are passing a copy of the data.

En el ejemplo siguiente, la función cambia el valor de la variable que se le ha pasado.In the following example, the function changes the value of the variable passed to it. En PowerShell, los enteros son tipos de valor, por lo que se pasan por valor.In PowerShell, integers are value types so they are passed by value. Por lo tanto, el valor de $var no cambia fuera del ámbito de la función.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

En el ejemplo siguiente, una variable que contiene un Hashtable se pasa a una función.In the following example, a variable containing a Hashtable is passed to a function. Hashtable es un tipo de objeto, por lo que, de forma predeterminada, se pasa a la función por referencia.Hashtable is an object type so by default it is passed to the function by reference.

Al pasar una variable por referencia , la función puede cambiar los datos y ese cambio se conserva después de que se ejecute la función.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 función agrega un nuevo par clave-valor que se conserva fuera del ámbito de la función.The function adds a new key-value pair that persists outside of the function's scope.

Escribir funciones para aceptar parámetros de referenciaWriting functions to accept reference parameters

Puede codificar las funciones para tomar un parámetro como referencia, independientemente del tipo de datos que se pasen.You can code your functions to take a parameter as a reference, regardless of the type of data passed. Para ello, es necesario especificar el tipo de parámetros como System.Management.Automation.PSReference , o [ref] .This requires that you specify the parameters type as System.Management.Automation.PSReference, or [ref].

Al utilizar referencias, debe utilizar la Value propiedad del System.Management.Automation.PSReference tipo para tener acceso a los datos.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
}

Para pasar una variable a un parámetro que espera una referencia, debe escribir la variable como referencia.To pass a variable to a parameter that expects a reference, you must type cast your variable as a reference.

Nota

Los corchetes y los paréntesis son obligatorios.The brackets and parenthesis are BOTH required.

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

Pasar referencias a métodos de .NETPassing references to .NET methods

Algunos métodos de .NET pueden requerir que se pase una variable como referencia.Some .NET methods may require you to pass a variable as a reference. Cuando la definición del método usa las palabras clave in , out o ref en un parámetro, espera una referencia.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)

El TryParse método intenta analizar una cadena como un entero.The TryParse method attempts to parse a string as an integer. Si el método se ejecuta correctamente, devuelve $true y el resultado se almacena en la variable que pasó por referencia.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

Referencias y ámbitosReferences and scopes

Las referencias permiten cambiar el valor de una variable en el ámbito primario dentro de un ámbito secundario.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

Solo se ha cambiado la variable del tipo de referencia.Only the reference type's variable was changed.

Consulte tambiénSee also

about_Variablesabout_Variables

about_Environment_Variablesabout_Environment_Variables

about_Functionsabout_Functions

about_Script_Blocksabout_Script_Blocks

about_Scopesabout_Scopes