4

如何在 C# 中创建新类型?例如字节的范围是 0 到 255,但我需要新的类型,它的范围是 0 到 10。

4

2 回答 2

5

令人惊讶的是,人们想要关闭这个不是一个真正的问题!

答案是 C# 没有支持在编译时检查整数范围的类型系统,除了一些内置情况:它阻止您将较大范围的数字分配给较小范围的数字。但是这些数字的范围是在语言规范中预先定义的。

于 2012-06-19T08:34:18.660 回答
0

您创建一个包装类byte(或者int,如果您需要更大的范围)。
然后,您定义常用操作 - *、/、- ... 您可以为此使用运算符重载。
您添加一些检查以查看该值是否保持在边界内,否则抛出适当的异常。
这是一个简短的示例:

class LimitedRangeValue
{
    private static readonly int maxval = 10;
    private static readonly int minval = 0;
    private int n;

    public LimitedRangeValue( int n )
    {
        if (n < minval || n > maxval)
            throw new OverflowException();
        this.n = n;
    }

    public static LimitedRangeValue operator +( LimitedRangeValue r1, LimitedRangeValue r2 )
    {
        return new LimitedRangeValue( r1.n + r2.n );
    }

    // Other operators by analogy

    public override string ToString()
    {
        return n.ToString();
    }
}

编辑:正如@Andrew Barber 在评论中指出的那样,您可以使用代码合同进行(额外)验证。

于 2012-06-19T08:33:19.723 回答