如何在c#中创建新类型?例如, byte 的范围为0到255,但我需要新类型,其范围为0到10。
答案 0 :(得分:4)
令人惊讶的是,人们希望关闭它并不是一个真正的问题!
答案是C#没有支持在编译时检查整数范围的类型系统,除了一些内置情况:它停止为较小范围的数字分配较大范围的数字。但这些数字的范围是在语言规范中预先定义的。
答案 1 :(得分:0)
如果您需要更大的范围,您可以创建一个包裹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在评论中指出的那样,您可以使用代码合同进行(额外)验证。