C#操作符重载示例

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class People
    {
        private String _UserName;
        private Int32 _Age;

        /// <summary>
        /// 构造函数
        /// </summary>
        public People()
        {
            _UserName = "";
            _Age = 0;
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="userName">姓名</param>
        /// <param name="age">年龄</param>
        public People(String userName, Int32 age)
        {
            _UserName = userName;
            _Age = age;
        }

        /// <summary>
        /// 属性:姓名
        /// </summary>
        public String UserName
        {
            get {return _UserName;}
            set { _UserName = value; }
        }

        /// <summary>
        /// 属性:年龄
        /// </summary>
        public Int32 Age
        {
            get { return _Age; }
            set { _Age = value; }
        }

        /// <summary>
        /// 重写 Object.ToString()
        /// </summary>
        /// <param name="people"></param>
        /// <returns></returns>
        public override String ToString()
        {
            return "姓名:" + this.UserName + " 年龄:" + this.Age.ToString();
        }

        /// <summary>
        /// 重载操作符:+
        /// </summary>
        /// <param name="op1"></param>
        /// <param name="op2"></param>
        /// <returns></returns>
        public static Int32 operator +(People op1, People op2)
        {
            return op1.Age + op2.Age;
        }

        /// <summary>
        /// 重载操作符:-
        /// </summary>
        /// <param name="op1"></param>
        /// <param name="op2"></param>
        /// <returns></returns>
        public static Int32 operator -(People op1, People op2)
        {
            return op1.Age - op2.Age;
        }

        /// <summary>
        /// 重载操作符:>
        /// </summary>
        /// <param name="op1"></param>
        /// <param name="op2"></param>
        /// <returns></returns>
        public static Boolean operator >(People op1, People op2)
        {
            return op1.Age > op2.Age;
        }

        /// <summary>
        /// 重载操作符:<
        /// </summary>
        /// <param name="op1"></param>
        /// <param name="op2"></param>
        /// <returns></returns>
        public static Boolean operator <(People op1, People op2)
        {
            return op1.Age < op2.Age;
        }

        /// <summary>
        /// 重载操作符:==
        /// </summary>
        /// <param name="op1"></param>
        /// <param name="op2"></param>
        /// <returns></returns>
        public static Boolean operator ==(People op1, People op2)
        {
            return op1.Age == op2.Age;
        }

        /// <summary>
        /// 重载操作符:!=
        /// </summary>
        /// <param name="op1"></param>
        /// <param name="op2"></param>
        /// <returns></returns>
        public static Boolean operator !=(People op1, People op2)
        {
            return op1.Age != op2.Age;
        }

        /// <summary>
        /// 重写 Object.GetHashCode()
        /// </summary>
        /// <returns></returns>
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        /// <summary>
        /// 重写 Object.Equals(object o)
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }

        public static void Main()
        {
            People peo1 = new People("张三", 27);
            People peo2 = new People("李四", 25);

            Console.WriteLine(peo1.ToString());
            Console.WriteLine(peo2.ToString());

            Console.WriteLine(peo1 + peo2); //年龄相加:52
            Console.WriteLine(peo1 - peo2); //年龄相差:2
            Console.WriteLine(peo1 > peo2); //年龄比较:true
            Console.WriteLine(peo1 < peo2); //年龄比较:false
            Console.WriteLine(peo1 == peo2); //年龄比较:false
            Console.WriteLine(peo1 != peo2); //年龄比较:true

            Console.ReadLine();
        }
    }
}


说明

·重载操作符必须用关键字static,但不代表它是静态方法;
·有些操作符必须成对的重载,不能单独重载其中一个,例如>和<、==和!=、false和true;
·尽量实现重写 Object.GetHashCode() 和 重写 Object.Equals(object o);

评论: 0 | 引用: 0 | 查看次数: 4499
发表评论
登录后再发表评论!