Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class Powershell类_Class_Powershell - Fatal编程技术网

Class Powershell类

Class Powershell类,class,powershell,Class,Powershell,我在Powershell中使用闭包创建了带有静态和实例方法的类。有更好的方法吗 使用静态“方法”创建和创建对象 使用实例“方法”创建对象 我已经看到了使用这种方法的可能性: $object = New-Module -AsCustomObject -ScriptBlock {...} 但是我不认为使用这种方法创建实例方法是可能的。实例方法应该很容易使用新模块。实例字段是脚本块中的顶级变量,例如: $sb = { param($theName,$theAge,$theBreed)

我在Powershell中使用闭包创建了带有静态和实例方法的类。有更好的方法吗

使用静态“方法”创建和创建对象

使用实例“方法”创建对象

我已经看到了使用这种方法的可能性:

$object = New-Module -AsCustomObject -ScriptBlock {...}

但是我不认为使用这种方法创建实例方法是可能的。

实例方法应该很容易使用
新模块。实例字段是脚本块中的顶级变量,例如:

$sb = {
    param($theName,$theAge,$theBreed)

    $Name = $theName
    $Age = $theAge
    $Breed = $theBreed

    $global:NumDogs++

    function Description {
        "Dog named $Name, age $Age, breed $Breed"
    }

    function get_NumDogs {
        "Total number of dogs is $NumDogs"
    }
    Export-ModuleMember -Variable Name,Age,Breed -Function Description,get_NumDogs
}


$dog1 = New-Module $sb -AsCustomObject -ArgumentList 'Mr. Bill',1,'Jack Russell'
$dog1.Name
$dog1.Age
$dog1.Description()
$dog1.get_NumDogs()
$dog2 = New-Module $sb -AsCustomObject -ArgumentList Fluffy,3,Poodle
$dog2.Name
$dog2.Age
$dog2.Description()
$dog2.get_NumDogs()

您还可以将ScriptMetod成员添加到对象。相关:来自未来的读者:自Powershell 5.0起,类是该语言的一流部分。不需要更多的乱七八糟的东西。非常感谢。这就是我一直在寻找的。在尝试使用setter方法更改(例如,
$Name
)之前,这似乎是有效的。我猜是因为
$Name
是本地方法?如何通过方法更新“实例范围”中的变量?
$object = New-Module -AsCustomObject -ScriptBlock {...}
$sb = {
    param($theName,$theAge,$theBreed)

    $Name = $theName
    $Age = $theAge
    $Breed = $theBreed

    $global:NumDogs++

    function Description {
        "Dog named $Name, age $Age, breed $Breed"
    }

    function get_NumDogs {
        "Total number of dogs is $NumDogs"
    }
    Export-ModuleMember -Variable Name,Age,Breed -Function Description,get_NumDogs
}


$dog1 = New-Module $sb -AsCustomObject -ArgumentList 'Mr. Bill',1,'Jack Russell'
$dog1.Name
$dog1.Age
$dog1.Description()
$dog1.get_NumDogs()
$dog2 = New-Module $sb -AsCustomObject -ArgumentList Fluffy,3,Poodle
$dog2.Name
$dog2.Age
$dog2.Description()
$dog2.get_NumDogs()