C#操作符重载特点是什么呢?
细心的朋友可能发现,C#虽然可以重载操作符,但和C++比较起来,却有很大的不同。定义的时候重载操作符方法必须是static,而且至少有一个参数(一目和二目分别是一个和两个),C#和C++比起来,最重要的特征是:<、>;==、!=;true、false必须成对出现,即重载了“<”就必须重载“>”,重载了“==”就必须重载“!=”,重载了“true”就必须重载“false”;另外,还必须实现基类object的两个虚方法:GetHashCode()和Equals(object obj)。
以下是C#操作符重载特点实例程序代码,有些地方写得不完善,只能说仅仅说明了问题,不对之处请指教:
- using System;
- using System.Xml;
- namespace ConsoleApplication8
- {
- /// <summary>
- /// 姓名类
- /// </summary>
- class Namer
- //C#操作符重载特点实例
- {
- private string FirstName;
- private string LastName;
- public Namer()
- {
- this.Init(null,null);
- }
- public Namer(string fn,string ln)
- {
- this.Init(fn,ln);
- }
- //C#操作符重载特点实例
- 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
- //C#操作符重载特点实例
- 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
- //C#操作符重载特点实例
- 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>
- //C#操作符重载特点实例
- 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()
- {
- //C#操作符重载特点实例
- 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
- //C#操作符重载特点实例
- 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();
- }
- }
- }
C#操作符重载特点实例的基本内容就向你介绍到这里,希望对你了解和学习C#操作符重载有所帮助。
【编辑推荐】