在哪里重载返回自定义类 C# 运算符/(int,int)的除法

本文关键字:int 除法 运算符 返回 重载 自定义 在哪里 | 更新日期: 2023-09-27 18:30:32

我正在尝试这样做:

/// <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/(...)
{
    ...
}

这不起作用,因为编译器需要接口,委托,...等等等等智能感知关键字。

感谢您的帮助!

在哪里重载返回自定义类 C# 运算符/(int,int)的除法

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

¶ 7.3.2:

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