gpt4 book ai didi

powershell - PowerShell:什么是System.IO.StreamWriter和System.Diagnostics.ProcessStartInfo?

转载 作者:行者123 更新时间:2023-12-02 23:06:40 27 4
gpt4 key购买 nike

我正在学习PowerShell。使用System.IO.StreamWriterSystem.Diagnostics.ProcessStartInfo,将它们称为“类”是否更准确?还是也可以将它们称为“新对象”?

$foo = New-Object System.Diagnostics.ProcessStartInfo

最佳答案

System.IO.StreamWriterSystem.Diagnostics.ProcessStartInfo是类,在.NET中更广泛的类型(或数据类型)
PowerShell在.NET上运行,在.NET的类型系统中,“类”是我们称为引用类型对象的行为的蓝图。

$foo = New-Object System.Diagnostics.ProcessStartInfo
在上面的语句中,我们要求 New-Object创建 ProcessStartInfo实例-也就是说,我们希望对象的行为符合 ProcessStartInfo类的规定。我们也可以说结果对象(现在由 $foo引用)的类型为ProcessStartInfo。
引用类型与值类型
上面我提到了引用类型的对象。之所以重要,是因为.NET类型可以分为各种类型-引用类型和值类型。
值类型既是内置数字类型( [int][double][decimal][bool]等),也是更复杂的数据类型,例如 [datetime],是 Get-Date返回的对象的类型。
这种区别(引用与值)很重要的原因是,它们在分配和存储时的行为有所不同。对于值类型,任何赋值都将导致.NET将对象的值复制到赋值目标:
$a = 1    
$b = $a # Assign value of $a to $b
$a++ # Modify value of $a
$b # Is $b 1 or 2?
在赋值操作 $b = $a期间,PowerShell查看 $a,发现其值 1[int]类型,并将值1的新副本存储在 $b中-因此,即使我们将 $a的值增加为2,即 $b的值不变。
对于引用类型,情况并非如此。引用类型对象通过引用进行存储和传递:
$a = [System.Diagnostics.ProcessStartInfo]::new("calc.exe")
$b = $a
$a.FileName = "notreally.exe"
$b.FileName # Is $b.FileName "calc.exe" or "notreally.exe"?
在这种情况下,因为 [System.Diagnostics.ProcessStartInfo]是引用类型,所以 $a不包含值(即与对象关联的数据),它仅包含引用或指针,指向数据实际存储在内存中的位置,并分配 $b = $a不会复制对象,而是 $a$b最终都引用相同的基础对象,并且在通过另一个查询时会反射(reflect)出对一个对象的修改。

关于powershell - PowerShell:什么是System.IO.StreamWriter和System.Diagnostics.ProcessStartInfo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63649608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com