重载运算符 c# Vector
overloading operator c# Vector
所以,我试图覆盖 c# 中的“-”运算符以便能够减去 2 个向量,但是我的 class 无法实现 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;
}
}
}
知道如何解决这个问题吗?
您只能在运算符自身中覆盖运算符 class。
将所有代码移至 Vector
class。
在您的矢量 class 中,覆盖其中的“-”运算符
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);
希望对你有所帮助
因为您正在尝试为 Class 定义运算符。至少它的一个参数应该在类型为你的 Class 的运算符中使用。例如你不能有 class Car
并且定义 Operator 只得到 int
.
您不能覆盖现有 classes.only 您自己的 classes 的运算符。
如果您不能修改 Vector Class,那么您应该声明自己的 class 命名 Vector。或使用您的 class 作为运算符的类型。
所以你可以
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
感谢您的精彩回复。我希望我能在弄清楚之前检查一下。会节省我很多时间。我最终完全按照你们所说的做了。这是我的。
public 静态 VectorUtil 运算符 -(VectorUtil aHeroPoint, VectorUtil bEnemyPoint) {
VectorUtil v = new VectorUtil();
v.Vec = new Vector(( aHeroPoint._p.X - bEnemyPoint._p.X),( aHeroPoint._p.Y - bEnemyPoint._p.Y));
return v;
}
所以,我试图覆盖 c# 中的“-”运算符以便能够减去 2 个向量,但是我的 class 无法实现 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;
}
}
}
知道如何解决这个问题吗?
您只能在运算符自身中覆盖运算符 class。
将所有代码移至 Vector
class。
在您的矢量 class 中,覆盖其中的“-”运算符
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);
希望对你有所帮助
因为您正在尝试为 Class 定义运算符。至少它的一个参数应该在类型为你的 Class 的运算符中使用。例如你不能有 class Car
并且定义 Operator 只得到 int
.
您不能覆盖现有 classes.only 您自己的 classes 的运算符。
如果您不能修改 Vector Class,那么您应该声明自己的 class 命名 Vector。或使用您的 class 作为运算符的类型。
所以你可以
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
感谢您的精彩回复。我希望我能在弄清楚之前检查一下。会节省我很多时间。我最终完全按照你们所说的做了。这是我的。
public 静态 VectorUtil 运算符 -(VectorUtil aHeroPoint, VectorUtil bEnemyPoint) { VectorUtil v = new VectorUtil(); v.Vec = new Vector(( aHeroPoint._p.X - bEnemyPoint._p.X),( aHeroPoint._p.Y - bEnemyPoint._p.Y)); return v; }