繁体   English   中英

如何申报新类型

[英]How to declare new type

如何在c#中创建新类型? 例如, byte的范围是0到255,但我需要新类型,其范围为0到10。

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

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

您创建一个包装byte (或int ,如果您需要更大范围)的类。
然后,您定义通常的操作 - *,/, - ...您可以使用运算符重载。
您添加一些检查以查看值是否仍在边界内,否则抛出相应的Exception。
这是一个简短的例子:

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在评论中指出的那样,您可以使用代码合同进行(额外)验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM