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 に答える