题
我的功能返回的一些长值 它包含两个数值中的较低和较高的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; }
}
不隶属于 StackOverflow