一个例子帮你搞懂C#语言高级特性系列(01) --- 运算符重载

下面的例子演示了如何使用C#的运算符重载:


using System;

namespace Com.LoonStudio.Example {
    /// <summary>
    /// 平面上的点
    /// </summary>
    public class Point {
        public double X { set; get; }	// 横坐标
        public double Y { set; get; }	// 纵坐标

		public Point(double x, double y) {
			X = x;
			Y = y;
		}

		/// <summary>
		/// 将*定义为计算两点间距离的运算符
		/// </summary>
		/// <param name="p1">点1</param>
		/// <param name="p2">点2</param>
		/// <returns>两点间的距离</returns>
		public static double operator *(Point p1, Point p2) {
			double dx = p1.X - p2.X;
			double dy = p1.Y - p2.Y;
			return Math.Sqrt(dx * dx + dy * dy);
		}
    }

	public class Line {
		public Point Start { set; get; }	// 起点
		public Point End { set; get; }		// 终点

		public Line(Point start, Point end) {
			Start = start;
			End = end;
		}

		/// <summary>
		/// 将|运算符定义为判断两条线段是否平行的运算符
		/// </summary>
		/// <param name="line1">线段1</param>
		/// <param name="line2">线段2</param>
		/// <returns>平行返回true,不平行返回false</returns>
		public static bool operator |(Line line1, Line line2) {
			double slope1 = line1.End.Y - line1.Start.Y / line1.End.X - line1.Start.X;
			double slope2 = line2.End.Y - line2.Start.Y / line2.End.X - line2.Start.X;
			return slope1 == slope2;
		}

		/// <summary>
		/// 线段的长度(通过*运算符计算起点和终点的距离)
		/// </summary>
		public double Length {
			get { return Start * End; }
		}
	}

    class Program {
        static void Main(string[] args) {
			Point p1 = new Point(1, 3);
			Point p2 = new Point(4, 6);
			Console.WriteLine("{0:F2}", p1 * p2);

			Line line1 = new Line(p1, p2);
			Line line2 = new Line(new Point(3, 5), new Point(12, 6));

			Console.WriteLine(line1 | line2 ? "平行" : "不平行");
        }
    }
}



注意:在进行运算符重载的时候最好保持运算符原有的含义,还有就是记得并非所有的运算符都可以重载,都需要重载。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值