我为什么要使用隐式/显式运算符?

Mar*_*mes 5 c# implicit-conversion explicit-conversion

检查下面的代码:

class Money
{
    public Money(decimal amount)
    {
        Amount = amount;
    }

    public decimal Amount { get; set; }

    public static implicit operator decimal(Money money)
    {
        return money.Amount;
    }

    public static explicit operator int(Money money)
    {
        return (int)money.Amount;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白它在我的代码中会有用,我不能只做一个像这样的方法:

public static int returnIntValueFrom(Money money)
{
    return (int)money.Amount;
}
Run Code Online (Sandbox Code Playgroud)

实施不是更容易和更清楚吗?

Tra*_*s J 5

这样做是为了允许将钱添加到其他钱中.如果没有这段代码,这将导致编译器错误,"运算符'+'不能应用于'Money'和'int'类型的操作数"

Money money = new Money(5.35m);
decimal net = money + 6;
Run Code Online (Sandbox Code Playgroud)

当铸造操作员出现时,它允许进行这些类型的转换而不会抛出异常.它可以帮助提高可读性并允许多态,例如,不同的货币可以实现自己的类型的转换.

  • 隐式演员本身就很糟糕(这里有一篇很好的文章可读)(http://netvignettes.wordpress.com/2011/04/24/implicit-conversion-operators-are-bad/)这个原因并且你应该这样做完全避免它们而不是建议它们.你可以更好地实现`+`运算符 - `public static Money operator +(Money money,decimal amount)`,而不是定义一个隐式的强制转换运算符.这使你的意图更清晰. (2认同)