あなたが持っているものと間違って何?これはPowerShellの5.0では正常に動作します:
Class ControllerError : System.Exception
{
}
Class OperationFailed : ControllerError
{
$Code
$Message
OperationFailed ($Code, $Message)
{
$this.Code = $Code
$this.Message = $Message
}
}
$o = [operationfailed]::new("500","Internal server errror")
$o.Code
500
$o.Message
Internal server errror
$o | Get-Member | Select Name, MemberType
Name MemberType
---- ----------
Equals Method
GetBaseException Method
GetHashCode Method
GetObjectData Method
GetType Method
ToString Method
Code Property
Data Property
HelpLink Property
HResult Property
InnerException Property
Message Property
Source Property
StackTrace Property
TargetSite Property
$o.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False OperationFailed ControllerError
$o.gettype().BaseType
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False ControllerError System.Exception
あなたはおそらく、彼らはSystem.Object
にしたくないと私は$Code
と$Message
のためのタイプを指定することをお勧めします。例:
Class OperationFailed : ControllerError
{
[string]$Code
[string]$Message
OperationFailed ([string]$Code, [string]$Message)
{
$this.Code = $Code
$this.Message = $Message
}
}
あなたが本当に基本コンストラクタを使用したい(またはあなたがPowerShellの< 5.0を使用したい)場合は、あなたはC#とAdd-Type
$def = @"
public class ControllerError : System.Exception
{
public ControllerError(string message) : base(message) { }
}
public class OperationFailed : ControllerError
{
public string Code;
public OperationFailed(string code, string message) : base(message)
{
this.Code = code;
}
}
"@
Add-Type -TypeDefinition $def
$o = [OperationFailed]::new("500","internal server error")
を使用する必要があります