如何写一个运算符?

时间:2012-11-08 20:41:03

标签: c# operators

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,但是我不知道如何使用上面的方法我写的是+运算符

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分: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课程重载。

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