2012-06-19 140 views
4

如何在c#中创建新类型?例如字节有范围0到255,但我需要新类型,将有0到10范围。如何声明新类型

+1

你通常如何创建一个新类型? public class blah ....创建一个新类型来做这件事似乎很没有意义...... –

+0

你确定你需要一个新类型,而不是仅仅是输入验证吗? –

+0

如何在编译时设置范围验证和类型验证?例如我不能为字节类型设置字符串,我得到编译错误。如何为我的类型做同样的事情? – Tomas

回答

4

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

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

+4

我同意你的意见。没有人理解我问,甚至没有回答这个问题,就没有人给出正确答案和结束问题。 – Tomas

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巴伯在评论中指出的那样,你可以使用(额外)验证代码契约。

+0

我想你会发现C#* *有操作符重载... http://msdn.microsoft.com/en-us/library/8edha89s%28VS.71%29.aspx –

+0

@BradleySmith谢谢!不知道;相应地改变了答案。 –