C # boxing / wrapper - пользовательский класс действует как целое число

1

На данный момент у меня этот класс

public class Currency
{
    private int _Amount;
    public Currency(){... }
    public Currency(int amount){_Amount = amount;}

    public override string ToString()
    {           
        return _Amount + " Gold.";
    }
}

Я хочу, чтобы этот класс имел всю функциональность целого числа, поэтому я могу делать такие вещи, как это

Currency curr = new Currency();
Currency curr2 = new Currency(100);
curr = 50; 
curr += 50;
curr += curr2;

Я нашел то, что мне нужно: Integer c++, но это для c++. Может ли кто-нибудь сказать мне, как я это делаю на С#?

public operator Currency() { return _Amount; }

Не работает и не добавляет неявного/явного в любом месте.

Теги:
integer
wrapper
boxing

2 ответа

1
Лучший ответ
class Currency
{
    ...


    // User-defined conversion from Digit to double 
    public static implicit operator int(Currency d)
    {
        return d._Amount;
    }
}

См. Неявный (ссылка на С#) для получения дополнительной информации. Второе, что вы хотите проверить, - перегрузка оператора.

  • 0
    спасибо, спасибо, чтобы я снова пошёл.
0

Вы хотите объявить его как struct (поэтому он не получает boxed/unboxed и не может быть null, если вы не отмечаете его Nullable) и имеют неявные/явные конвертеры (могут быть преобразованы без приведения)

    public struct Currency

    public static implicit operator Currency(decimal value)
    {
        return new Currency(value);
    }

    public static implicit operator decimal(Currency me)
    {
        return me.value;
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню