C#的运算符重载的问题
我们都知道...运算符重载中,都要是 public static的...原因我们都知道...但是我感觉这样的设计貌似有点误认....
我的意思是说.如.
C# code?public static Vector operator +(Vector lhs, Vector rhs) { Vector result = new Vector(lhs); result.x += rhs.x; result.y += rhs.y; result.z += rhs.z; return result; }
Main call:
C# code?Vector vect1, vect2, vect3; vect1 = new Vector(3.0, 3.0, 1.0); vect2 = new Vector(2.0, -4.0, -4.0); vect3 = vect1 + vect2;
因为C#中.这里都可以看成是 "对象可以调用 static Member"...好像...这有点...特殊而已哦..
对于运算符重载,C#不是特地定义了一个特殊关键字 operator 了么
public static Vector operator plus(Vector lhs, Vector rhs) {
Vector result = new Vector(lhs);
result.x += rhs.x;
result.y += rhs.y;
result.z += rhs.z;
return result;
}
Vector vect1, vect2, vect3;
vect1 = new Vector(3.0, 3.0, 1.0);
vect2 = new Vector(2.0, -4.0, -4.0);
vect3 = plus(vect1 , vect2);
vect3 = +(vect1 , vect2)
这种写法被Lisp原生支持。
本质上说,“运算符重载”实现了对编程语言本身的修改,而对于动态语言来说,语言本身处处可以重新定义、修改和扩展,而“运算符重载”只是一个很平常和无关紧要的技巧罢了。