程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中奇妙的操作符重載

C#中奇妙的操作符重載

編輯:關於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();

}



}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved