about_Ref

Krátký popis

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

Dlouhý popis

Proměnné můžete předat funkcím 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, aby byly předány hodnotou. Hodnota $var je proto 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 se proměnná obsahující funkci Hashtable předá. Hashtable je typ objektu, takže ve výchozím nastavení se předává funkci odkazem.

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

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

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

Funkce přidá novou dvojici klíč-hodnota, která přetrvává mimo obor funkce.

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

Funkce můžete zakódovat tak, aby jako referenci převzaly parametr bez ohledu na typ předávaný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 zadat přetypování proměnné jako odkaz.

Poznámka

Potřebujete 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 můžou vyžadovat předání proměnné jako odkazu. Když 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

Byla změněna pouze proměnná typu odkazu.

Viz také