【问题标题】:Where to overload division returning custom class C# operator/ (int,int)在哪里重载除法返回自定义类 C# operator/ (int,int)
【发布时间】:2014-11-16 18:15:05
【问题描述】:

我正在尝试这样做:

/// <summary>
/// Syntax support for assigning a new Rational from "x/y" notation.
/// </summary>
/// <param name="num">Numerator, appears before the '/'</param>
/// <param name="denom">Denominator, appears after the '/'</param>
/// <returns>A new Rational using the num/denom convention</returns>
public static Rational operator/(int num,int denom)
{
    Rational r;
    try
    {
        r = new Rational(num, denom);
    }
    catch (Exception e)
    {

        throw e;
    }
    return r;
}

但是,当我将它作为我的类的一部分时,我得到一个错误,因为其中一个论点必须是包含类。我确实注意到,如果我在我的测试程序中将它声明在 main() 之外,它就可以正常工作,但是我希望类文件包含所有内容,以便我可以移交 .cs 文件。这样做的正确方法是什么?

我也试过

Class Rational
{
     ....
}
public static Rational operator/(...)
{
    ...
}

这不起作用,因为编译器需要 interface,delegate, ... blah blah intellisense 关键字。

感谢您的帮助!

【问题讨论】:

  • @mikez 感谢您的反馈,您应该将其作为答案,以便我接受。
  • 好的,我删除了我的评论并将其作为答案。

标签: c# operator-overloading overloading operator-keyword division


【解决方案1】:

没有办法做到这一点。二元运算符重载的要求是其中一个操作数是您为其声明运算符的类型。您不能为其他类型声明运算符。你想声明的操作符实际上是为int 考虑的,它已经有一个除法操作符。

¶ 7.3.2:

用户定义的运算符声明始终要求至少一个参数是包含运算符声明的类或结构类型。因此,用户定义的运算符不可能与预定义的运算符具有相同的签名。

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多