Lập trình C# - Quá tải toán tử

Nạp chồng lớp Point theo các yêu cầu sau:

  1. Khai báo thuộc tính và Point
  2. Nạp chồng các phương thức :ToString, Equals, GetHashCode,CompareTo của lớp Object
  3. Nạp chồng các toán tử: +, -  ( Cho phép cộng với một đối tượng Point khác, công với một số, một số công với Point, tương tự phép trừ).
  4. Nạp chồng các toán tử: ++, -- để cho phép tăng giảm mỗi lần 1 Point
  5. Nạp chồng các toán tử: ==, =!, >, <, >=, <=
  6. Hỗ trợ chuyển đổi kiểu tường minh và ngầm định để chuyển kiểu Point về kiểu float (double) hoặc kiểm float về kiểu Point
  7. Viết hàm Main để kiểm tra các phương thức trên

Bước 1:  Khai báo thuộc tính và Point

public int X { get; set; }
public int Y { get; set; }

public Point(int xPos, int yPos)
{
    X = xPos;
    Y = yPos;
}

Bước 2:  Xây dựng  các phương thức :ToString, Equals, GetHashCode,CompareTo của lớp Object

public override string ToString()
{
    return string.Format("[{0}, {1}]", X, Y);
}
//nạp chồng hai hàm Equals và GetHashCode
public override bool Equals(object o)
{
    return o.ToString() == this.ToString();
}
 public override int GetHashCode()
{
    return this.ToString().GetHashCode();
}
//cài đặt giao diện IComparable
public int CompareTo(object o)
{
  if (o is Point)
  {
      Point p = (Point)o;
      if (this.X > p.X && this.Y > p.Y) return 1;
      if (this.X < p.X && this.Y < p.Y) return -1;
      else return 0;
  }
  else throw new ArgumentException();
}

Bước 3: Nạp chồng các toán tử: +, -

public static Point operator + (Point p1, Point p2)
{
    return new Point(p1.X + p2.X, p1.X + p2.Y);
}

public static Point operator - (Point p1, Point p2)
{
    return new Point(p1.X - p2.X, p1.Y - p2.Y);
}

public static Point operator + (Point p1, int change)
{
    return new Point(p1.X + change, p1.Y + change);
}

public static Point operator - (Point p1, int change)
{
    return new Point(p1.X - change, p1.Y - change);
}

Bước 4:  Nạp chồng các toán tử: ++, --

  public static Point operator ++(Point p1)
  {
      return new Point(p1.X + 1, p1.Y + 1);
  }

  public static Point operator --(Point p1)
  {
      return new Point(p1.X - 1, p1.Y - 1);
  }

Bước 5:  Nạp chồng các toán tử: ==, =!, >, <, >=, <=

//nạp chồng toán tử bằng sử dụng hàm Equals
public static bool operator == (Point p1, Point p2)
{
    return p1.Equals(p2);
}

public static bool operator != (Point p1, Point p2)
{
    return !p1.Equals(p2);
}
//nạp chồng toán tử so sánh sử dụng hàm CompareTo
public static bool operator < (Point p1, Point p2)
{
    return (p1.CompareTo(p2) < 0);
}

public static bool operator > (Point p1, Point p2)
{
    return (p1.CompareTo(p2) > 0);
}

Bước 6:  Viết hàm Main để kiểm tra các phương thức trên

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Point
{
    class Program
    {
        static void Main(string[] args)
        {
            Point p1 = new Point(10, 10);
            Point p2 = new Point(20, 20);

            Point p3 = p1 + p2;
            Console.WriteLine(p3);

            Point p4 = p1 - 5;
            Console.WriteLine(p4);

            p1++;
            Console.WriteLine(p1);

            if (p1 != p2) Console.WriteLine("Not equal");

            if (p1 < p2) Console.WriteLine("Less than");

            Console.ReadKey();
        }
    }
}

Xem ví dụ

Bước 7: Nhấn Ctrl+F5 để chạy và xem kết quả