あなたが持っているものの何が問題になっていますか?これは 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
タイプを$Code
andに指定することをお勧め$Message
します。おそらくそれらを にしたくないからですSystem.Object
。元。:
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")