C#操作符重載特點實例淺析
C#操作符重載特點是什么呢?
細心的朋友可能發(fā)現(xiàn),C#雖然可以重載操作符,但和C++比較起來,卻有很大的不同。定義的時候重載操作符方法必須是static,而且至少有一個參數(shù)(一目和二目分別是一個和兩個),C#和C++比起來,最重要的特征是:<、>;==、!=;true、false必須成對出現(xiàn),即重載了“<”就必須重載“>”,重載了“==”就必須重載“!=”,重載了“true”就必須重載“false”;另外,還必須實現(xiàn)基類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#操作符重載特點實例的基本內(nèi)容就向你介紹到這里,希望對你了解和學(xué)習C#操作符重載有所幫助。
【編輯推薦】