Помогите с неявной перегрузкой оператора в C # - PullRequest
2 голосов
/ 21 ноября 2010

Я пытаюсь создать класс под названием LoopingInt.Он хранит два целых числа, одно из которых является максимальным значением целого числа, а другое - хранимым целым числом.Когда целое число падает ниже 0 или выше максимального значения, оно «возвращается».Поэтому, если вы добавите 3 к LoopingInt со значением 4, а максимальное значение будет равно 6, внутренне сохраненное целое число в классе будет равно 7, но внешний запрос с целым числом вернет 0.

Что яхочу сделать это, чтобы я мог работать с LoopingInts, как если бы они были целыми числами.Я уже могу назначить LoopingInts для объектов int (т.е. int x = myLoopingInt), но я не могу назначить int для LoopingInt, потому что я не могу понять, как передать обратно объект LoopingInt с правильным максимальным значением.Мне нужно максимальное значение из левого значения, но я не знаю, как его получить.

Ответы [ 3 ]

2 голосов
/ 21 ноября 2010

Если вы спрашиваете, как исправить:

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

, чтобы член myLoopingInt Value был изменен, а член MaxValue остался прежним, тогда я не думаю, что это возможно.Вместо этого вы можете установить свойство:

myLoopingInt.Value = x;
0 голосов
/ 21 ноября 2010

Вы можете написать оператор неявного преобразования:

public static implicit operator LoopingInt(int i)
{
  return new LoopingInt(i);
}
0 голосов
/ 21 ноября 2010

Ну, вам нужно выбрать семантику, которую вы хотите:

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))!

...