У вас не может быть двух участников с одинаковым именем. Свойство A
и метод A
имеют одно и то же имя, поэтому возникает ошибка.
В вашем классе есть два члена с тем же именем, [int]$A
и [void]A([string]$Argument)
. Да, один - это свойство ([int]$A
), а другой - метод ([void]A([string]$Argument)
), и они называются по-разному ($var.A
и $var.A()
), но они являются членами, которые вы можете видеть из командлета Get-Member
, однако, поскольку они оба имеют одинаковое имя, тот, который был определен ранее, будет иметь приоритет над другим, который в данном случае является вашей собственностью, [int]$A
PS C:\Users\Neko> $Test = [myClass]::new()
PS C:\Users\Neko> $Test | Get-Member
TypeName: myClass
Name MemberType Definition
---- ---------- ----------
A Method void A(string Argument)
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
B Property string B {get;set;}
C Property bool C {get;set;}
Но если вы измените имя, чтобы они были другими, например
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
}
}
Теперь, если я использую Get-Member
, я смогу увидеть метод AM
:
PS C:\Users\Neko> $Test = [myClass]::new()
PS C:\Users\Neko> $Test | Get-Member
TypeName: myClass
Name MemberType Definition
---- ---------- ----------
AM Method void AM(string Argument)
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
A Property int A {get;set;}
B Property string B {get;set;}
C Property bool C {get;set;}
Который, как вы можете видеть в столбце Name
, не имеет ()
, поэтому A
и A()
не будут различаться в глазах парсера.
Теперь Я могу использовать $test.AM("Argument")
PS C:\Users\Neko> $Test.AM("Argument")
Argument
PS C:\Users\Neko> $Test
A B C
- - -
1 Property True
И, как вы можете видеть, он вывел Argument
и изменил C
на True