我的功能返回的一些长值 它包含两个数值中的较低和较高的32位。

我认为最好的方式来处理返回的价值 是为了获得我的自定义的类型从长和提供 类型增像GetLowerValue(),GetHigherValue().

问题是这样。净不允许从长

如果你汇编,

public class SubmitOrderResult : long
{
}

你会得到:

cannot derive from sealed type 'long'

为什么是那样设计以及如何克服它吗?

感谢

有帮助吗?

解决方案

正如已经提到的价值的类型。净是密封所以没有办法你可以从长。你应该创造扩展的方法的建议。

public static class LongExtensions
{
    public static long GetLowerValue(this long value)
    {
        ...
    }

    public static long GetHigherValue(this long value)
    {
        ...
    }
}

其他提示

您不能从任何.NET值类型的派生 - 它们都通过定义密封

也许你可以实现你的GetLowerValue和GetHigherValue方法为扩展方法?

  

我的函数返回其含有在较低和较高的32位的两个值的一些长的值。

这听起来像一个真的,真的很肮脏的黑客。这可能是适合于贴近金属的语言(例如C),但不用于更高级别的,面向对象的语言。

在面向对象的语言,您扩展型系统,而不是骚扰现有各类听从你的命令。因此,该解决方案应该是创建一个新类型携带您的信息。

你可以做的是写与隐式转换运营结构。将工作正是你想要的方式:

public struct SubmitOrderResult
{
    private long _result;

    public SubmitOrderResult(long result)
    {
        _result = result;
    }

    public long Result
    {
        get { return _result; }
        set { _result = value; }
    }

    public int GetHigherValue()
    {
        return (int)(_result >> 32);
    }

    public int GetLowerValue()
    {
        return (int)_result;
    }

    public static implicit operator SubmitOrderResult(long result)
    {
        return new SubmitOrderResult(result);
    }

    public static implicit operator long(SubmitOrderResult result)
    {
        return result._result;
    }
}

然后,你可以这样做:

SubmitOrderResult result = someObject.TheMethod();
Console.WriteLine(result.GetHigherValue());
Console.WriteLine(result.GetLowerValue());

...就像你想要的。

如果我理解正确的话,你的函数实际上返回两个值,而你收拾他们到long其实是一个实现细节。在这种情况下,这个隐藏的细节和创建包含所述值和所要求的操作的类:

public class SubmitOrderResult
{
    private readonly long value_;

    public int OneValue
    { 
        get { return (int)(value_ >> 32); } 
    }

    public int TheOtherValue
    { 
        get { return (int)(value_ & 0xFFFFFFFF); } 
    }

    public SubmitOrderResult(long value)
    { value_ = value; }
}

可以不克服它。

作为long是一个密封式,因此不能从它们继承。请参阅 MSDN

  

由于结构是隐式密封,它们不能被继承。

     

有关的更多信息,请参阅继承(C#编程指南)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top