Csharp/Egendefinerte operatører

Fra Wikibøker – frie læremidler

Operator overloading[rediger]

C# støtter noe som svært få andre språk støtter, nemlig muligheten til å legge til funksjoner for behandling av aritmetikk med klasser og strukturer. Alle operators som addisjon, subtraksjon, multiplikasjon og divisjon, må deklareres som en static funksjon, med nøkkelordet operator foran, og tar to parameter, som er hver av objektene som skal behandles.

La oss ta for oss klassen Point, og legge til noen operatører

public struct Point
{
  float m_x;
  float m_y;
 
  public float X { get { return m_x; } set { m_x = value; } }
  public float Y { get { return m_y; } set { m_y = value; } }
 
  public Point(float x, float y)
  {
    m_x = x; m_y = y;
  }
 
  public static Point operator + (Point a, Point b)
  {
    return new Point(a.X + b.X, a.Y + b.Y);
  }
  public static Point operator - (Point a, Point b)
  {
    return new Point(a.X - b.X, a.Y - b.Y);
  }
  public static Point operator * (Point a, Point b)
  {
    return new Point(a.X * b.X, a.Y * b.Y);
  }
  public static Point operator / (Point a, Point b)
  {
    return new Point(a.X / b.X, a.Y / b.Y);
  }
}

Nå kan man bruke denne strukturen i en helt vanlig aritmetisk operasjon (men kun med Point som datatype)

public Point foo()
{
  Point a = new Point(16, 32);
  Point b = new Point(64, 1);
  return a + b * b;
}