2010-11-20 18 views
2

LoopingIntというクラスを作成しようとしています。 2つの整数を格納します.1つは整数の最大値であり、もう1つは格納された整数です。整数が0以下または最大値より上になると、整数は "ループ"して戻ります。したがって、値が4のLoopingIntに3を加え、最大値が6の場合、クラス内の内部的に格納されている整数は7になりますが、外部に整数を要求すると0が返されます。C#での暗黙的な演算子のオーバーロードに関するヘルプ

それは私がLoopingIntsを整数として扱うことができるようにするためです。私はすでにintオブジェクト(int x = myLoopingInt)にLoopingIntsを割り当てることができますが、正しい最大値を持つLoopingIntオブジェクトを返す方法がわからないので、LoopingIntにintを代入することはできません。私は左の値から最大値が必要ですが、それを得る方法はわかりません。

+1

を。 – Oded

+0

FYIあなたが構築しているのは、合同クラスの整数のモジュラ算術システムです。それによってあなたは*可換リング*を形成します。参考になる数学的背景については、http://en.wikipedia.org/wiki/Modular_arithmeticを参照してください。 –

+0

良いアイデアのように聞こえます。私はそれをします。 – Timballisto

答えて

2

あなたは修正する方法を求めている場合:

LoopingInt myLoopingInt = new LoopingInt(4, 10); 
myLoopingInt = x; 

をmyLoopingIntのValueメンバーが変更されたがMaxValueメンバーは、私はその可能性はないと思う同じままされるようになっています。代わりにプロパティを設定することができます。

myLoopingInt.Value = x; 
+0

今のところ、私はこの事実を、それほど苛立つように受け入れなければならないと思う。 – Timballisto

0

をさて、あなたが欲しいのセマンティクスを決定する必要があります。

class LoopingInt32 { 
    // details elided 

    public LoopingInt32(int maximumValue, int value) { // details elided } 

    public static implicit operator LoopingInt32(int x) { 
     int maximumValue = some function of x; <-- you implement this 
     int value = some other function of x; <-- you implement this 
     return new LoopingInt32(maximumValue, value); 
    } 
} 

私たちはあなたのためにこれを決定することはできません。

編集:あなたが求めているのは完全に不可能です。割り当ての右側は、左側には分かりません。左手側(考慮するSomeFunctionThatEatsLoopingInt32(5))さえないかもしれません!

+0

申し訳ありませんが、私の質問ではっきりしている必要があります。 maximumValueはxの値に依存しません。それは左の値に格納されていますが、それを取得する方法はわかりません。価値私はすでに取得する方法を知っている - それは単にxです。 – Timballisto

+0

@Timballisto:ああ。あなたが求めていることは全く不可能です。代入の右辺は左辺について決して知らない。 – jason

0

あなたは暗黙の型変換演算子書き込むことができます。値はラップアラウンドさせる整数オーバーフローの概念は、多くのプログラマによく知られているように私には、 `WraparoundInt`または似たような名前を付けます

public static implicit operator LoopingInt(int i) 
{ 
    return new LoopingInt(i); 
} 
+0

まあ、私の考えは暗黙の演算子を使うことですが、私がする必要があるのは次のようなものです: myLoopingInt = 5 myLoopingIntの最大値はそのままです。これを行うには、左の値からその値を取得する必要があります、そして、私はどのようにわかりません。 – Timballisto

関連する問題