3
參考
可能有人請解釋爲什麼更新的財產不被該示例中的函數退出後持續低於爲什麼當我通過它在PowerShell中
function CreateConfigObject
{
# base solution directory
$Config = New-Object -typename PSObject
# Build Config File Contents
$Config | Add-Member -Name MyProperty -MemberType NoteProperty -Value "Original Value"
return $Config
}
function MyFunction([ref]$obj)
{
Write-Host "Inside function Before Updating : " $obj.Value
Write-host "Are the objects equal? " $obj.Value.Equals($config.MyProperty)
$obj.Value = "New Value"
Write-Host "Inside function After Updating : " $obj.Value
}
$config = CreateConfigObject
Write-Host "Before calling function : " $config.MyProperty
MyFunction ([ref]$config.MyProperty)
Write-Host "After calling function : " $config.MyProperty
既然你是路過的父對象,你不需要'[參考]'任何更多。 – 2014-10-19 23:46:45
@EmperorXLII對,你不需要它在函數上,但是當你調用被引用對象的函數時,它仍然是必需的。所以'MyFunction($ obj)'是好的,但你仍然需要'MyFunction([ref] $ config)' – TheMadTechnician 2014-10-20 16:36:23
對不起,我的意思是'[ref]'可以從函數和調用站點中刪除。你只需要'[ref]'來改變變量的目標。例如,如果你有'函數f($ h){$ h ['a'] ='b'}'和一個散列表'$ v',調用'f $ v'將會添加一個元素到hashtable中, [ref]'(就像'MyFunction'可以在不使用'[ref]'的情況下設置'MyProperty')。另一方面,如果你有'函數g([ref] $ h){$ h.Value = @ {'c'='d'}}'和'$ w = $ null',你需要使用' g([ref] $ w)'爲了得到結果到'$ w'。 – 2014-10-20 23:50:24