Bre*_*len 2 .net c# struct operator-overloading
我正在通过CodeBetter.com 阅读商业基元并且正在考虑这个想法.
以他的Money为例,如何以类似于常规值类型的方式实现它?
我的意思是这样做:
Money myMoney = 100.00m;
Run Code Online (Sandbox Code Playgroud)
代替:
Money myMoney = new Money(100.00m);
Run Code Online (Sandbox Code Playgroud)
我理解如何覆盖所有操作符以允许执行数学等功能,但我不知道需要重写什么以允许我正在尝试做的事情.
这样做的想法是最小化实现新类型时所需的代码更改,并保持与原始类型相同的想法,只需使用不同的值类型名称和业务逻辑功能.
理想情况下,我会继承Integer/Float/Decimal或任何需要的东西,并根据需要覆盖,但显然结构不可用.
你可以提供一个隐式转换操作符从decimal到Money像这样:
class Money {
public decimal Amount { get; set; }
public Money(decimal amount) {
Amount = amount;
}
public static implicit operator Money(decimal amount) {
return new Money(amount);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
Money money = 100m;
Console.WriteLine(money.Amount);
Run Code Online (Sandbox Code Playgroud)
现在,这里发生的事情并不是我们正在重载赋值运算符; 这在C#中是不可能的.取而代之的是,我们正在做的是提供一个操作符可以隐式转换一个decimal到Money必要的时候.在这里,我们尝试将十进制文字分配给100m类型的实例Money.然后,在幕后,编译器会调用我们定义的隐式转换操作,并使用指定投给实例的结果money的Money.如果您想了解其机制,请阅读C#3.0规范的§7.16.1和§6.1.
请注意,decimal如上所示,模拟钱的类型应该是引擎盖下的.
| 归档时间: |
|
| 查看次数: |
1007 次 |
| 最近记录: |