about_Ref

Krátký popis

Popisuje, jak vytvořit a použít proměnnou referenčního typu. Proměnné typu odkazu můžete použít k povolení funkce změnit hodnotu proměnné, která je jí předána.

Dlouhý popis

Proměnné můžete funkcím předat odkazem nebo hodnotou.

Když předáte proměnnou podle hodnoty, předáváte kopii dat.

V následujícím příkladu funkce změní hodnotu proměnné předané do ní. V PowerShellu jsou celá čísla typy hodnot, takže se předávají podle hodnoty. Proto je hodnota $var beze změny mimo rozsah funkce.

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

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

V následujícím příkladu je proměnná obsahující Hashtable funkci předána funkci. Hashtable je typ objektu, takže ve výchozím nastavení je předán funkci odkazem.

Při předávání proměnné odkazem může funkce změnit data a tato změna se po spuštění funkce zachovají.

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

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

Funkce přidá nový pár klíč-hodnota, který zůstane mimo obor funkce.

Zápis funkcí pro příjem referenčních parametrů

Funkce můžete kódovat tak, aby jako referenci přebíjel parametr bez ohledu na typ předaných dat. To vyžaduje, abyste zadali typ parametrů jako System.Management.Automation.PSReferencenebo [ref].

Při použití odkazů musíte pro přístup k datům použít Value vlastnost System.Management.Automation.PSReference typu.

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

Pokud chcete předat proměnnou parametru, který očekává odkaz, musíte proměnnou přetypovat jako odkaz.

Poznámka:

Jsou vyžadovány závorky a závorky.

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

Předávání odkazů na metody .NET

Některé metody .NET mohou vyžadovat předání proměnné jako odkazu. Pokud definice metody používá klíčová slova in, outnebo ref u parametru, očekává odkaz.

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

Metoda TryParse se pokusí analyzovat řetězec jako celé číslo. Pokud je metoda úspěšná, vrátí $truea výsledek je uložen v proměnné, kterou jste předali odkazem.

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

Odkazy a obory

Odkazy umožňují změnit hodnotu proměnné v nadřazené oblasti v rámci podřízeného oboru.

# 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

Změnila se pouze proměnná referenčního typu.

Viz také