1

私は C# XNA を使用していますが、2 つのポイントを一緒に追加しようとすると、それができないことがわかりました。このコードを実行できるようにするために Point クラスに追加できる方法はありますか?

Point a = new Point(3,4);
Point b = new Point(6,2);
Point c = a + b; //Should equal new Point(9,6);
4

5 に答える 5

3

+次のように、演算子を単純にオーバーロードできます。

class Point
{
    public int X { get; private set; }
    public int Y { get; private set; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }

    public static Point operator +(Point p1, Point p2)
    {
        return new Point(p1.X + p2.X, p1.Y + p2.Y);
    }
}

これで、コードは期待どおりにコンパイルされます。

Point a = new Point(3, 4);
Point b = new Point(6, 2);
Point c = a + b; //Should equal new Point(9,6); - and it is :)

演算子のオーバーロードの詳細については、MSDNを参照してください。

于 2013-04-20T08:38:38.327 に答える
1

別のクラスに追加します。

public static void Add(this Point a, Point b){
     a.X += b.X;
     a.Y += b.Y;
}
于 2013-04-20T05:39:55.883 に答える
1

Size構造体をPoint構造体に追加し、次のように Point を Size コンストラクターに渡すことで簡単に変換できます。

c = a + (new Size(b));

なぜ DOT NET が集中タプルと拡張タプルを微妙に区別することを選択したのかは、私にはわかりません。

于 2013-04-20T05:40:36.123 に答える
1

以下に示すように、拡張メソッドを使用できます

class Program
{
    static void Main(string[] args)
    {
        Point a = new Point(1, 2);
        Point b = new Point(2, 4);

        Point c=a.AddPoints(b);
    }
}

public static class MyExtensions
{
    public static Point AddPoints(this Point x, Point y)
    {
        return new Point(x.X + y.X, x.Y + y.Y);
    }
}  
于 2013-04-20T06:14:33.610 に答える