powershell 5 类是否有访问修饰符?

Nay*_*iya 6 windows powershell

有没有办法控制Powershell类中成员的访问?就像我们在 C++ 或 C# 中所做的一样。我们如何在 Powershell 中编写下面的 C# 类

class Car
{
  private string engine;
  public string wheel_type;

  public void drive()
  {
  }
  private int change_engine(string new_engine)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

Sag*_*pre 7

从 PowerShell 5.0 开始,PowerShell 添加了类支持。

请注意,PowerShell 不提供 private 关键字。但是,您可以使用 hide 关键字,默认情况下它将从智能感知中隐藏属性/方法(尽管可以强制显示),并且 Get -Member cmdlet 不会返回隐藏成员,除非-Force开关为用过的。

这是一个示例汽车类,它演示了所有内容。

enum Engine {
    None
    V4
    V8
}

Class Car

{    
    static [int]$numberOfWheels = 4
    [int]$numberOfDoors
    [datetime]$year
    [String]$model
    [Engine]$Engine 

    car() {
    #Constructor ... optional
    }

    car([Engine]$Engine,$numberofDoors = 4 ) {
    #Constructor overload with default value... optional
    $this.Engine = $Engine
    $this.numberOfDoors = $numberofDoors
    }

    drive()
    {
    }

    hidden [int] change_engine([string] $new_engine) {
        return 0
    }
}


# Call to static property
[Car]::numberOfWheels

#Create Car object
$MyCar = New-Object Car([Engine]::V4,4)

#Call drive
$MyCar.drive()
Run Code Online (Sandbox Code Playgroud)

参考

4syops - PowerShell 类(系列 4)

Microsoft PowerShell 文档:关于类

Sapien.com - 隐藏关键字