运算符和继承

Tim*_*ong 9 c# architecture oop operator-overloading

我的大脑变成了果冻,或者我有一种不经意的经历,或者某种东西.我正在修改一个看起来有点像这样的类层次结构:
在此输入图像描述

我的Money班级看起来像这样:

public abstract class Money
{
    public int Amount { get; set; }

    public static bool operator ==(Money leftSide, Money rightSide)
    {
        // Money can only be equal if it is in the same currency.
        if (leftSide.GetType() != rightSide.GetType()) return false;
        return leftSide.Amount == rightSide.Amount;
    }

    public static bool operator !=(Money leftSide, Money rightSide)
    {
        // If the currencies are different, the amounts are always considered unequal.
        if (leftSide.GetType() != rightSide.GetType()) return true;
        return leftSide.Amount != rightSide.Amount;
    }

    public static Money operator *(Money multiplicand, int multiplier)
    {
        var result = multiplicand * multiplier;
        return result;
    }

    public static Dollar Dollar(int amount)
    {
        return new Dollar(amount);
    }

    public static Franc Franc(int amount)
    {
        return new Franc(amount);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的美元operator *看起来像这样:

public static Dollar operator *(Dollar multiplicand, int multiplier)
{
    var result = multiplicand.Amount * multiplier;
    return new Dollar(result);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行这个测试代码,我会得到一个堆栈溢出(wahoo!)

{
    Money fiveDollars = Money.Dollar(5);
    Money timesTwo = fiveDollars*2;
}
Run Code Online (Sandbox Code Playgroud)

我曾预料到这将递归调用子类(Dollar)operator *,这将返回一个明确的结果,因为(Dollar*int)是非递归定义的.由于这不起作用,另一种选择是我做了一些愚蠢的事情.为什么这不起作用?什么是获得这种行为的正确方法?

Pub*_*bby 11

你似乎已经遗漏了 .Amount

public static Money operator *(Money multiplicand, int multiplier)
{
    var result = multiplicand.Amount * multiplier;
    return result;
}
Run Code Online (Sandbox Code Playgroud)