c# - Operator overloading question -
suppose have class:
public class vector { public float x { get; set; } public vector(float xvalue) { x = xvalue; } public static vector operator +(vector v1, vector v2) { return new vector(v1.x + v2.x); } }
have derived class:
public class myvector : vector { public static myvector operator +(myvector v1, myvector v2) { return new myvector(v1.x + v2.x); } public myvector(float xvalue):base(xvalue) { } }
no if execute folowing code:
vector v1 = new myvector(10); //type myvector vector v2 = new myvector(20); //type myvector vector v3 = v1 + v2; //executed operator of vector class
here executed vector's + operator, type of v1 , v2 myvector
, v3 vector type @ point.
why happens?
because type of variables v1
, v2
vector
, not myvector
. operator overloads static methods resolved compiler @ compile-time, not @ runtime; cannot overridden.
v1
, v2
have typed myvector
compiler select overload defined in myvector
class.
optionally, define method public virtual vector add(vector other)
on vector
class , have myvector
override it. call method operator+
method of vector
, work expected. (myvector
not need define operator+
itself.)
Comments
Post a Comment