首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell,stem:类

PowerShell,stem:类
EN

Stack Overflow用户
提问于 2016-04-27 20:52:03
回答 1查看 90关注 0票数 0

对于python来说,什么是时髦的对等物:

代码语言:javascript
复制
class ControllerError(Exception):


class OperationFailed(ControllerError):

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

对于那些如此纯粹的人,我迄今为止的尝试是:

代码语言:javascript
复制
Class ControllerError : System.Exception
{

}


Class OperationFailed : ControllerError
{
    $Code
    $Message

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-27 21:19:01

你的东西怎么了?这在PowerShell 5.0中很好:

代码语言:javascript
复制
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。前:

代码语言:javascript
复制
Class OperationFailed : ControllerError
{
    [string]$Code
    [string]$Message

    OperationFailed ([string]$Code, [string]$Message)
    {
        $this.Code = $Code
        $this.Message = $Message
    }
}

如果您真的想使用基本构造函数(或者您希望使用Powershell < 5.0),那么您需要使用C#和Add-Type

代码语言:javascript
复制
$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")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36900641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档