0

python に相当する豪華なものは次のとおりです。

class ControllerError(Exception):


class OperationFailed(ControllerError):

  def __init__(self, code = None, message = None):
    super(ControllerError, self).__init__(message)
    self.code = code
    self.message = message

SO純粋主義者のために、これまでの私の試み:

Class ControllerError : System.Exception
{

}


Class OperationFailed : ControllerError
{
    $Code
    $Message

    OperationFailed ($Code, $Message)
    {
        $this.Code = $Code
        $this.Message = $Message
    }
}
4

1 に答える 1

1

あなたが持っているものの何が問題になっていますか?これは 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

タイプを$Codeandに指定することをお勧め$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")
于 2016-04-27T21:19:01.290 に答える