C#装箱/包装-自定义类充当整数

本文关键字:整数 自定义 装箱 包装 | 更新日期: 2023-09-27 18:29:42

目前我有这个类

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++的。有人能告诉我在C#中是如何做到这一点的吗?

public operator Currency() { return _Amount; }

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

C#装箱/包装-自定义类充当整数

class Currency
{
    ...

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

有关更多信息,请参阅隐式(C#参考)。您要检查的第二件事是运算符重载。

您想要的是将其声明为struct(这样它就不会被装箱/取消装箱,也不会为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;
    }