How to write an overload operator where both arguments are an interface

I use the interface for most of my stuff. I can’t find a way to create an overload + operator that will allow me to add for any objects that implement the IPoint interface

code


interface IPoint
{
    double X { get; set; }
    double Y { get; set; }
}


class Point : IPoint
{
   double X { get; set; }
   double Y { get; set; }

   //How and where do I create this operator/extension  ???
   public static IPoint operator + (IPoint a,IPoint b)
   {
     return Add(a,b);
   }

   public static IPoint Add(IPoint a,IPoint b)
   {
      return new Point { X = a.X + b.X, Y = a.Y + b.Y };
   } 
}

   //Dumb use case :
public class Test
{
   IPoint _currentLocation;

   public Test(IPoint initialLocation)
   {
     _currentLocation = intialLocation
   }
   public MoveOf(IPoint movement)
   {

      _currentLocation = _currentLocation + intialLocation;
     //Much cleaner/user-friendly than _currentLocation = Point.Add(_currentLocation,intialLocation); 
   }
}

+3
source share
2 answers

No. Imagine if you have two instances of IPoint, a and b, both different classes (which implement IPoint). Now call "a + b". Which operator + is called? What specific type is returned?

: , : " #, ". , , , .

+3

, , , . , .Add movement Point Type . , , #, , .

, , Point Type MoveOf, Point , , , Point .

, , , Point Type MoveOf, movement MoveOf . , , all, IPoint MoveOf.

0

Source: https://habr.com/ru/post/1709212/


All Articles