C#boxing / wrapper - 自定义类充当整数

时间:2014-11-09 14:48:07

标签: c# integer wrapper boxing

目前我有这门课

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++ wrapper 但这适用于C ++。有人能告诉我我是如何用C#做的吗?

public operator Currency() { return _Amount; }

不起作用,也不在任何地方添加隐式/显式。

2 个答案:

答案 0 :(得分:2)

class Currency
{
    ...


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

有关详细信息,请参阅implicit (C# Reference)。您要检查的第二件事是operator overloading

答案 1 :(得分:0)

你想要的是将它声明为struct(因此它不会被装箱/取消装箱,也不能为空,除非你将其标记为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;
    }