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

Popular posts from this blog

linux - Using a Cron Job to check if my mod_wsgi / apache server is running and restart -

actionscript 3 - TweenLite does not work with object -

jQuery Ajax Render Fragments OR Whole Page -