为什么我不能长期得出?

Cap*_*mic 6 .net c# type-safety

我的函数返回一个long值,它包含两个较低和较高32位的值.

我认为处理返回值的最佳方法是从long派生我的自定义类型并提供类型扩展器,如GetLowerValue(),GetHigherValue().

问题是.NET不允许从long派生

如果你编译它

public class SubmitOrderResult : long
{
}
Run Code Online (Sandbox Code Playgroud)

你得到:

cannot derive from sealed type 'long'
Run Code Online (Sandbox Code Playgroud)

为什么设计如此,如何克服它?

谢谢

Jam*_*mes 11

如前所述,.NET中的值类型是密封的,因此无法从长时间派生.您应该按照建议创建扩展方法.

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

    public static long GetHigherValue(this long value)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ann 6

您无法从任何.NET值类型派生 - 它们都是按定义密封的.

也许您可以将GetLowerValue和GetHigherValue方法实现为扩展方法?


Kon*_*lph 5

我的函数返回一个long值,它包含两个较低和较高32位的值.

这听起来像是一个非常非常糟糕的黑客.它可能适用于接近金属的语言(例如C),但不适用于更高级别的面向对象语言.

在OO语言中,您可以扩展类型系统,而不是骚扰现有类型来进行出价.因此,解决方案应该是创建一个包含您的信息的新类型.