about_Ref

Krótki opis

Opisuje sposób tworzenia i używania zmiennej typu odwołania. Zmienne typu odwołania umożliwiają funkcji zmianę wartości zmiennej przekazanej do niej.

Długi opis

Zmienne można przekazywać do funkcji według odwołania lub wartości.

Gdy przekazujesz zmienną według wartości, przekazujesz kopię danych.

W poniższym przykładzie funkcja zmienia wartość zmiennej przekazanej do niej. W programie PowerShell liczby całkowite są typami wartości, więc są przekazywane przez wartość. W związku z tym wartość parametru $var jest niezmieniona poza zakresem funkcji.

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

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

W poniższym przykładzie zmienna zawierająca Hashtable element jest przekazywana do funkcji. Hashtable jest typem obiektu, więc domyślnie jest przekazywany do funkcji przez odwołanie.

Podczas przekazywania zmiennej przez odwołanie funkcja może zmienić dane i ta zmiana będzie się powtarzać po wykonaniu funkcji.

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

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

Funkcja dodaje nową parę klucz-wartość, która utrzymuje się poza zakresem funkcji.

Pisanie funkcji w celu akceptowania parametrów referencyjnych

Funkcje można kodować, aby przyjmować parametr jako odwołanie, niezależnie od typu przekazanych danych. Wymaga to określenia typu parametrów jako System.Management.Automation.PSReference, lub [ref].

W przypadku używania odwołań należy użyć Value właściwości System.Management.Automation.PSReference typu, aby uzyskać dostęp do danych.

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

Aby przekazać zmienną do parametru, który oczekuje odwołania, należy wpisać rzutowanie zmiennej jako odwołanie.

Uwaga

Nawiasy i nawiasy są wymagane.

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

Przekazywanie odwołań do metod platformy .NET

Niektóre metody platformy .NET mogą wymagać przekazania zmiennej jako odwołania. Gdy definicja metody używa słów kluczowych in, outlub ref w parametrze , oczekuje odwołania.

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

Metoda TryParse próbuje przeanalizować ciąg jako liczbę całkowitą. Jeśli metoda powiedzie się, zwraca $truewartość , a wynik jest przechowywany w zmiennej przekazanej przez odwołanie.

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

Odwołania i zakresy

Odwołania umożliwiają zmianę wartości zmiennej w zakresie nadrzędnym w zakresie podrzędnym.

# 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

Zmieniono tylko zmienną typu odwołania.

Zobacz też