c# - 运算符重载

标签 c# operator-overloading

学习 C# 我读过有关运算符重载的内容。不幸的是,我正在使用的这本书不是很实用,而是很理论,所以我想确保我能很好地理解它。 基本上重载运算符也允许我用我的类型进行操作。就像我有类 Enemy 一样,我可以这样做 Enemy+Enemy=SuperEnemy (具有属性总和的 Enemy 实例) 是这样吗?

最佳答案

从概念的角度来看,是的;重载运算符允许您为该运算符实现一些逻辑行为,以便可以以更自然的方式操作您的对象。以 Money 类为例:

public class Money
{
   public decimal Amount {get;set;}
   public string Unit {get;set;}
}

金钱通常被视为一个数字,因此如果能够对金钱进行加减来获得总和和差值,那就太好了;然而,描述货币的货币单位(USD、CND、EUR、JYN)对它们的添加方式有很大影响;添加 100 日元 + 100 美元!= 200 美元或 200 日元。因此,您可能会重载运算符以确保货币单位相似,或者将一种货币单位转换为另一种货币单位(100JPY ~= 1USD):

//in the above Money class
public static operator + (Money a, Money b)
{
    if(a.Unit != b.Unit) throw new InvalidOperationException("Cannot perform arithmetic on Money of two different types.")
    //or, create some helper that will convert the second term
    //CurrencyConverter.Convert(b.Amount, b.Unit, a.Unit);
    return new Money{Amount = a.Amount + b.Amount, Unit = a.Unit};
}

关于c# - 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5143968/

相关文章:

C++ 运算符>> 使用 Mutator 重载?

c++ - 重载运算符或生成函数 (C++)

c# - 将枚举转换为人类可读的值

C# 向匿名线程函数发送参数

c# - LINQ 中的日期比较

c++ - 对如何重载 == 运算符感到困惑

generics - 如何实现涉及特征对象内置类型的通用可交换 std::ops?

c# - 使用 Autofac 将 WebAPI UrlHelper 注入(inject)服务

c# - 如何测试附加文件的 ASP NET ashx 处理程序

c++ - 使用运算符重载表格