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

二項 演算子をオーバーロードする場合は+、2 つのパラメーターを指定する必要があります。例えば:

// 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 に答える