about_Ref

Rövid leírás

A referenciatípus-változók létrehozását és használatát ismerteti. Hivatkozástípus-változókkal lehetővé teheti, hogy egy függvény módosítsa a neki átadott változó értékét.

Hosszú leírás

A változókat hivatkozás vagy érték alapján is átadhatja a függvényeknek.

Amikor érték szerint ad át egy változót, az adatok másolatát adja át.

Az alábbi példában a függvény módosítja a neki átadott változó értékét. A PowerShellben az egész számok értéktípusok, ezért érték szerint vannak átadva. Ezért az érték $var nem változik a függvény hatókörén kívül.

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

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

Az alábbi példában egy függvényt Hashtable tartalmazó változó lesz átadva egy függvénynek. Hashtableobjektumtípus, ezért alapértelmezés szerint hivatkozással továbbítja a függvénynek.

Ha hivatkozással ad át egy változót, a függvény módosíthatja az adatokat, és ez a változás a függvény végrehajtása után is megmarad.

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

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

A függvény hozzáad egy új kulcs-érték párot, amely a függvény hatókörén kívül marad.

Függvények írása referenciaparaméterek elfogadásához

A függvények kóddal hivatkozhatnak egy paraméterre, függetlenül az átadott adatok típusától. Ehhez meg kell adnia a paraméterek típusát a következőként System.Management.Automation.PSReference: vagy [ref].

Hivatkozás használata esetén az adatok eléréséhez a ValueSystem.Management.Automation.PSReference típus tulajdonságát kell használnia.

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

Ha egy változót olyan paraméternek szeretne átadni, amely hivatkozásra számít, be kell írnia a változót hivatkozásként.

Feljegyzés

A zárójelek és zárójelek egyaránt kötelezőek.

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

Hivatkozások átadása .NET-metódusokra

Egyes .NET-metódusok esetében szükség lehet egy változó hivatkozásként való átadására. Amikor a metódus definíciója a kulcsszavakat invagy outref egy paramétert használja, a metódus hivatkozásra számít.

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

A TryParse metódus egy sztringet egész számként próbál elemezni. Ha a metódus sikerrel jár, az visszaadja$true, és az eredményt a referencia által átadott változó tárolja.

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

Hivatkozások és hatókörök

A hivatkozások lehetővé teszik a szülőhatókörben lévő változó értékének módosítását egy gyermekhatókörben.

# 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

Csak a referenciatípus változója módosult.

Lásd még