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; }
不起作用,也不在任何位置添加隐式/显式。
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;
}