C#中奇妙的操作符重载

        细心的学员可能发现, C#虽然可以重载操作符,但和C++比较起来,却有很大的不同。定义的时候重载操作符方法必须是static,而且至少有一个参数(一目和二目分别是一个和两个),C#和C++比起来,最重要的特征是:<、>;==、!=;true、false必须成对出现,即重载了“<”就必须重载“>”,重载了“==”就必须重载“!=”,重载了“true”就必须重载“false”;另外,还必须实现基类object的两个虚方法:GetHashCode()和Equals(object obj)。
    以下是程序代码,只能说仅仅说明了问题:
using System;
using System.Xml;
namespace ConsoleApplication8
{
    /// <summary>
    /// 姓名类
    /// </summary>
    class Namer
    {
        private string FirstName;
        private string LastName;
        public Namer()
        {
            this.Init(null,null);
        }
        public Namer(string fn,string ln)
        {
            this.Init(fn,ln);
        }
        private void Init(string fn,string ln)
        {
            this.FirstName=fn;
            this.LastName=ln;
        }
        /// <summary>
        /// 重载运算符true
        /// </summary>
        /// <param name="n"></param>
        /// <returns>如果姓名中姓或名有一个为空,就返回假</returns>
        public static bool operator true(Namer n)
        {
            if(n.FirstName==null || n.LastName==null)
                return false;
            else
                return true;
        }
        /// <summary>
        /// 重载运算符false
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        public static bool operator false(Namer n)
        {
            if(n.FirstName==null || n.LastName==null)
                return false;
            else
                return true;
        }
        /// <summary>
        /// 重载运算符==
        /// </summary>
        /// <param name="n1"></param>
        /// <param name="n2"></param>
        /// <returns></returns>
        public static bool operator ==(Namer n1,Namer n2)
        {
            if(n1.FirstName==n2.FirstName && n1.LastName==n2.LastName)
                return true;
            else
                return false;
        }
        /// <summary>
        /// 重载运算符!=
        /// </summary>
        /// <param name="n1"></param>
        /// <param name="n2"></param>
        /// <returns></returns>
        public static bool operator !=(Namer n1,Namer n2)
        {
            if(n1.FirstName!=n2.FirstName || n1.LastName !=n2.LastName)
                return true;
            else
                return false;
        }
        /// <summary>
        /// 重载运算符>
        /// </summary>
        /// <param name="n1"></param>
        /// <param name="n2"></param>
        /// <returns></returns>
        public static bool operator >(Namer n1,Namer n2)
        {
            return (n1.FirstName.CompareTo(n2.FirstName)>0 && n1.LastName.CompareTo(n2.LastName)>0);
        }
        /// <summary>
        /// 重载运算符<
        /// </summary>
        /// <param name="n1"></param>
        /// <param name="n2"></param>
        /// <returns></returns>
        public static bool operator <(Namer n1,Namer n2)
        {
            return (n1.FirstName.CompareTo(n2.FirstName)<0 && n1.LastName.CompareTo(n2.LastName)<0);
        }
        /// <summary>
        /// 重写方法,必须有,后面的111是乱加的,你也可以写其它的
        /// </summary>
        /// <returns></returns>
        public override int GetHashCode()
        {
            return base.GetHashCode()*111;
        }
        /// <summary>
        /// 重写方法,必须有
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            return base.Equals (obj);
        }
        /// <summary>
        /// 重写方法,必须有
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return "姓:"+this.FirstName+" 名:"+this.LastName;
        }
        public static void Main()
        {
            Namer n1=new Namer("li","zanhong");
            Namer n2=new Namer("ahang","aan");
            //Namer n2=new Namer("li","zanhong");
            if(n1==n2)
                Console.WriteLine("一样的名字");
            else
                Console.WriteLine("不一样的名字");
            /
            if(n1!=n2)
                Console.WriteLine("不一样的名字成立");
            else
                Console.WriteLine("同样的名字成立");
            /
            if(n1>n2)
                Console.WriteLine(n1.ToString()+">"+n2.ToString());
            else if(n1<n2)
                Console.WriteLine(n1.ToString()+"<"+n2.ToString());
            else
                Console.WriteLine("没有正确比较");
            Console.ReadLine();
        }
    }
}
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值