about_Ref

Deskripsi singkat

Menjelaskan cara membuat dan menggunakan variabel jenis referensi. Anda dapat menggunakan variabel jenis referensi untuk mengizinkan fungsi mengubah nilai variabel yang diteruskan ke variabel tersebut.

Deskripsi panjang

Anda dapat meneruskan variabel ke fungsi berdasarkan referensi atau berdasarkan nilai.

Saat Anda meneruskan variabel menurut nilai, Anda meneruskan salinan data.

Dalam contoh berikut, fungsi mengubah nilai variabel yang diteruskan ke dalamnya. Di PowerShell, bilangan bulat adalah jenis nilai sehingga diteruskan oleh nilai. Oleh karena itu, nilai $var tidak berubah di luar lingkup fungsi.

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

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

Dalam contoh berikut, variabel yang Hashtable berisi diteruskan ke fungsi. Hashtable adalah jenis objek sehingga secara default diteruskan ke fungsi berdasarkan referensi.

Saat meneruskan variabel berdasarkan referensi, fungsi dapat mengubah data dan perubahan tersebut tetap ada setelah fungsi dijalankan.

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

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

Fungsi ini menambahkan pasangan kunci-nilai baru yang bertahan di luar cakupan fungsi.

Menulis fungsi untuk menerima parameter referensi

Anda dapat membuat kode fungsi Anda untuk mengambil parameter sebagai referensi, terlepas dari jenis data yang diteruskan. Ini mengharuskan Anda menentukan jenis parameter sebagai System.Management.Automation.PSReference, atau [ref].

Saat menggunakan referensi, Anda harus menggunakan Value properti jenis System.Management.Automation.PSReference untuk mengakses data Anda.

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

Untuk meneruskan variabel ke parameter yang mengharapkan referensi, Anda harus mengetikkan variabel Anda sebagai referensi.

Catatan

Tanda kurung dan tanda kurung keduanya diperlukan.

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

Meneruskan referensi ke metode .NET

Beberapa metode .NET mungkin mengharuskan Anda untuk meneruskan variabel sebagai referensi. Ketika definisi metode menggunakan kata kunci in, , outatau ref pada parameter, itu mengharapkan referensi.

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

Metode TryParse ini mencoba mengurai string sebagai bilangan bulat. Jika metode berhasil, metode mengembalikan $true, dan hasilnya disimpan dalam variabel yang Anda lewati dengan referensi.

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

Referensi dan cakupan

Referensi memungkinkan nilai variabel dalam cakupan induk diubah dalam cakupan anak.

# 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

Hanya variabel jenis referensi yang diubah.

Lihat juga