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,但是我不知道如何使用上面的方法我写的是+运算符
答案 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
课程重载。
在你的情况下,你实际上是在重载一元加运算符,而不是二元运算符。