2
class Test
{
    public int a { get; set; }
    public int b { get; set; }

    public Test(int a, int b)
    {
        this.a = a;
        this.b = b;
    }

    public static int operator +(Test a)
    {
        int test = a.a*a.b;
        return test;
    }

    public void Testa()
    {
        Test t = new Test(5, 5);
        Console.WriteLine((t.a + t.b));
    }
}

当我调用 Testa() 方法时,我希望结果为 5*5,但我不确定如何使用上面的这个方法,如果我写的是 + 运算符

4

2 回答 2

7

您的方法重载了一元运算 +符。因此,如果您编写以下代码,您可以看到它的实际效果:

Test t = new Test(5, 5);
Console.WriteLine(+t); // Prints 25

如果要重载二元 +运算符,则需要提供两个参数。例如:

// I strongly suggest you don't use "a" and "b"
// as parameter names when they're already (bad) property names
public static int operator +(Test lhs, Test rhs)
{
    return lhs.a * rhs.b + lhs.b * rhs.a;    
}

然后将其用作:

public static void Main()
{
    Test x = new Test(2, 3);
    Test y = new Test(4, 5);
    Console.WriteLine(x + y); // Prints 22 (2*5 + 3*4)
}
于 2012-11-08T20:49:46.003 回答
1

你不能那样做。整数的 + 运算符重载是 C# 语言规范的一部分,不能被用户代码覆盖。

您可以执行以下操作:

public class Test
{
    public int a { get; set; }
    public int b { get; set; }

    public Test(int a, int b)
    {
        this.a = a;
        this.b = b;
    }

    public static Test operator +(Test first, Test second)
    {
        return new Test(first.a * second.a
            , first.b * second.b);
    }

    public override string ToString()
    {
        return a.ToString() + " " + b.ToString();
    }

    public void Testa()
    {
        Test t = new Test(5, 5);
        Test t2 = new Test(2, 6);
        Console.WriteLine(t + t2);
    }
}

这里的想法是您正在重载Test类的运算符,而不是int.

在您的情况下,您实际上是重载了一元加号运算符,而不是二元运算符。

于 2012-11-08T20:49:24.683 回答