哪里重载除法返回自定义类C#operator /(int,int)

时间:2014-11-16 18:15:06

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

我正在尝试这样做:

/// <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 keywords。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

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

¶7.3.2:

  

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