微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何使用PowerShell中的行为(方法)创建真实对象?

可能这个问题在….之前已经被回答了,但是我没有找到我需要的具体答案.

BTW我正在使用PowerShell 3

那么,我在PowerShell中是新的,但是作为C#开发人员,我有很多经验,所以使用对象对我来说非常重要.

所以我想知道在PowerShell脚本中是否有一个干净的方法来应用OOP概念(并不是所有这些概念都很棒),例如有一些我想做的事情.

注意:我知道我可以在PowerShell中编写C#代码来创建DTO,也可以在C#中创建PowerShell二进制模块,过去我已经做到了,但是我现在正在寻找的是写入的能力PowerShell中的所有代码,但是面向对象的方式.

我想做的事情

>在PowerShell中创建一个对象,并公开一个在PowerShell中编写的函数,如下所示:

function New-Person
(
    [Parameter()][string]$firstName
)
{
    function Walk()
    {
        Write-Host "Walking...";
    }

    $person = New-Object psobject;

    $person | Add-Member -MemberType NoteProperty -Name FirstName -Value $firstName;

    #This line does not work
    #$person | Add-Member -MemberType CodeMethod -Name Walk -Value Walk;

    return $person;
}

$MyPerson = New-Person -firstName "JP";

$MyPerson;

#This line does not work
$MyPerson.Walk();

>封装行为,这意味着在我的对象内创建函数,然后将其标记为私有
> [很高兴]创建基类,以便我可以继承和专门化我的行为覆盖方法
> [很高兴]创建接口,所以我可以单独测试单元测试我的PowerShell方法(我知道有像pester这样的工具,我只是专注于OOP功能)

到目前为止我所做的只是创建仅具有属性的对象(DTO),但是我想向对象添加行为

如果你们指出我正确的方向,我将不胜感激

解决方法

方法创建对象的两个选项:

>加入会员
>新建模块-AsCustomObject

代码示例:

$person | Add-Member -MemberType ScriptMethod -Value {
    'I do stuff!'
}

$person = New-Module -AsCustomObject -ScriptBlock {
    $Property = 'value'
    [string]$Other = 'Can be strongly typed'

    function MyMethod {
        'I do stuff!'
    }

}

编辑:说私人/公开…在后一个例子属性将不会显示认”.您可以使用Export-ModuleMember来决定什么是public,并指定将被公开的-Variable(properties)和/或-Function(methods).没有明确的Export-ModuleMember,它将与“normal”模块中的行为相同 – 仅导出函数(方法).

原文地址:https://www.jb51.cc/csharp/95649.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐