我正在尝试创建一个名为LoopingInt的类。它存储两个整数,一个是整数的最大值,另一个是存储的整数。当整数低于0或高于最大值时,它会“循环”回来。因此,如果向值为4的LoopingInt添加3,并且最大值为6,则类中内部存储的整数将为7,但在外部请求整数将返回0.
我想要做的就是这样我可以使用LoopingInts,就好像它们是整数一样。我已经可以将LoopingInts分配给int对象(即int x = myLoopingInt),但我不能将一个int分配给一个LoopingInt,因为我无法弄清楚如何传回一个具有正确最大值的LoopingInt对象。我需要左手值的最大值,但我不知道如何得到它。
答案 0 :(得分:2)
如果你问如何修复:
LoopingInt myLoopingInt = new LoopingInt(4, 10);
myLoopingInt = x;
以便myLoopingInt的Value
成员被修改但MaxValue
成员保持不变,那么我认为不可能。您可以改为设置属性:
myLoopingInt.Value = x;
答案 1 :(得分: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)
)!
答案 2 :(得分:0)
您可以编写隐式转换运算符:
public static implicit operator LoopingInt(int i)
{
return new LoopingInt(i);
}