2016-04-27 21 views
0

什么将是Python的豪华的等效:Python来的PowerShell,干:类

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 
    } 
} 

回答

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 

我会推荐指定类型$Code$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")