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.PSReference
nebo [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
, out
nebo 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í $true
a 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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro