重载运算符c#Vector

本文关键字:c#Vector 运算符 重载 | 更新日期: 2023-09-27 17:59:41

因此,我试图覆盖c#中的"-"运算符,以便能够减去2个向量,但我的类无法实现Vector。

namespace Vectors
{
    class VectorUtilv
    {
        private Point _p;
        private Point _p2;
        private Vector _v;

         public Vector V
        {
            get { return _v; }
            set { _v = value; }
        }
        public Point AddVector(Vector v)
        {
            _p.X = (_p.X + v.X);
            _p2.Y = (_p.Y + v.Y);
            return _p2;
        }
        // This is where I am trying to override but I cant add the v.X or 
        // the v.Y because it is not a vector. If i cast it as a vector the 
        // override doesn't work.
        //////////////////////////////////////////////////////////////////
        public static VectorUtilv operator -(Vector a, Vector b)
        {
            Vector v = new Vector();
            v.X = a.X - b.X;
            v.Y = a.Y - b.Y;
            return v;
        }
    }    
}

你知道我该怎么解决这个问题吗?

重载运算符c#Vector

因为您正在尝试为类定义运算符。它的至少一个参数应该在类的类型为的运算符中使用。例如,不能有类Car并定义Operator switch only Gets int

不能覆盖现有类的运算符。只能覆盖您自己的类。

如果不能修改Vector类,那么应该声明自己的类Vector。或者使用类的Type作为运算符。

这样你就可以拥有

    class VectorUtilv
    {
        private Point _p;
        private Point _p2;
        private Vector _v;
        public static VectorUtilv operator -(VectorUtilv a, VectorUtilv b)
        {
            //...
        }
    }

    class Vecotr
    {
        private Point _p;
        private Point _p2;
        private Vector _v;
        public static Vecotr operator -(Vecotr a, Vecotr b)
        { 
            //...
        }
    }

但如果使用解决方案2。那么在使用Vector时需要使用限定符。

System.Windows.Vector // is in Windows assembly
Vector // is your class

您只能覆盖自己类中的运算符。

将所有这些代码移到Vector类中。

在向量类中,覆盖中的'-'运算符

public class Vector
{
    public int X { get; set; }
    public int Y { get; set; }
    public static Vector operator -(Vector a, Vector b)
    {
        Vector v = new Vector();
        v.X = a.X - b.X;
        v.Y = a.Y - b.Y;
        return v;
    }
}

然后,你可以像一样使用它

Vector v1 = new Vector { X = 5, Y = 9};
Vector v2 = new Vector { X = 3, Y = 4 };
Vector vr = v1 - v2;
Console.WriteLine("Resultant Vector X: {0} & Y:{1}", vr.X, vr.Y);

我希望它能帮助你。

感谢您的回复。我真希望我能在弄清楚之前检查一下。会为我节省很多时间。我最后做的几乎和你们说的一模一样。这是我的东西。

公共静态VectorUtil运算符-(VectorUtilaHeroPoint,VectorUtil-bEnemyPoint){VectorUtil v=新的VectorUtil();v.Vec=新矢量((aHeroPoint.p.X-bEnemyPoint.p.X),(aHerePoint.p.Y-bEnemyPpoint.p.Y));返回v;}