重载运算符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;
}
}
}
你知道我该怎么解决这个问题吗?
因为您正在尝试为类定义运算符。它的至少一个参数应该在类的类型为的运算符中使用。例如,不能有类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;}