Как создать конструктор? - PullRequest
0 голосов
/ 12 июля 2020

В моем последнем вопросе Stack Overflow помог мне исправить ошибку в моих методах, поэтому теперь у меня есть такой класс, как

class Main
{
    [int]$A
    [string]$B
    [bool]$C
}

class myClass : Main
{
    myClass(){
        $This.A = 1
        $This.B = "Property"
        $This.C = $False
    }

    [void] AM([string]$Argument) {
        Write-Host $Argument
        $This.C = $True
    }
}

, который имеет метод AM, но как я могу сделать такие конструкторы, как

[myClass]::myConstructor()

1 Ответ

2 голосов
/ 12 июля 2020
Синтаксис

PowerShell в целом аналогичен синтаксису C#, поскольку они оба используют структуру. NET. Похоже, вы сбиваете с толку stati c операторы и конструкторы .

Конструкторы - это в основном входные данные, которые может принимать класс. Например:

class Main
{
    [int]$A
    [string]$B
    [bool]$C
}

class myClass : Main
{
    myClass(){
        $This.A = 1
        $This.B = "Property"
        $This.C = $False
    }

    [void] AM([string]$Argument) {
        Write-Host $Argument
        $This.C = $True
    }
}

В вашем классе

    myClass(){
        $This.A = 1
        $This.B = "Property"
        $This.C = $False
    }

является конструктором. Они содержат свойства из оператора ::new() stati c (это могло вас запутать).

A stati c operator похож на метод, но с stati c операторы (::). Вы определяете операторы stati c с Static [void] или другим типом в зависимости от желаемого типа вывода. Пример:

    Static [void] AS() {
        Write-Host "Test"
    }

В таком классе, как

class Main
{
    [int]$A
    [string]$B
    [bool]$C
}

class myClass : Main
{
    myClass(){
        $This.A = 1
        $This.B = "Property"
        $This.C = $False
    }

    [void] AM([string]$Argument) {
        Write-Host $Argument
        $This.C = $True
    }

    Static [void] AC() {
        Write-Host "Test"
    }
}

, вы можете вызвать оператор stati c с помощью

[myClass]::AS()

с выводом

Test

Чего нельзя сделать с методами:

PS C:\> [myClass]::AM("Argument")
Method invocation failed because [myClass] does not contain a method named 'AM'.
At line:1 char:1
+ [myClass]::AM()
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Технически stati c операторы рассматриваются как методы, но они разные.

Конечно, вы также можете иметь аргументы в своем операторе stati c, в основном это методы, которые вызываются по-разному:

class Main
{
    [int]$A
    [string]$B
    [bool]$C
}

class myClass : Main
{
    myClass(){
        $This.A = 1
        $This.B = "Property"
        $This.C = $False
    }

    Static [void] AC([string]$Argument) {
        Write-Host $Argument
    }
}

и

PS C:\> [myClass]::AC("Test")
Test
PS C:\> [myClass]::AC("Argument")
Argument
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...