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

来源:互联网 发布:php读取json文件内容 编辑:程序博客网 时间:2024/04/29 16:45

下面的例子演示了如何使用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 ? "平行" : "不平行");        }    }}



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