C#中奇妙的操作符重载

** C# ** ** 中奇妙的操作符重载 ** ** **

细心的朋友可能发现, C# 虽然可以重载操作符,但和 C++ 比较起来,却有很大的不同。定义的时候重载操作符方法必须是 static ,而且至少有一个参数(一目和二目分别是一个和两个), C# 和 C++ 比起来,最重要的特征是: < 、 > ; == 、 != ; true 、 false 必须成对出现,即重载了“ < ”就必须重载“ > ”,重载了“ == ”就必须重载“! = ”,重载了“ true ”就必须重载“ false ”;另外,还必须实现基类 object 的两个虚方法: GetHashCode()和Equals( object obj)。

以下是程序代码,有些地方写得不完善,只能说仅仅说明了问题,不对之处请指教:

using System;

using System.Xml;

namespace ConsoleApplication8

{

///

1<summary>
2
3///  姓名类 
4
5///  </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;

}

///

1<summary>
2
3///  重载运算符true 
4
5///  </summary>

///

1<param name="n"/>

///

1<returns> 如果姓名中姓或名有一个为空,就返回假  </returns>

public static bool operator true (Namer n)

{

if (n.FirstName== null || n.LastName== null )

return false ;

else

return true ;

}

///

1<summary>
2
3///  重载运算符false 
4
5///  </summary>

///

1<param name="n"/>

///

1<returns></returns>

public static bool operator false (Namer n)

{

if (n.FirstName== null || n.LastName== null )

return false ;

else

return true ;

}

///

1<summary>
2
3///  重载运算符== 
4
5///  </summary>

///

1<param name="n1"/>

///

1<param name="n2"/>

///

1<returns></returns>

public static bool operator ==(Namer n1,Namer n2)

{

if (n1.FirstName==n2.FirstName && n1.LastName==n2.LastName)

return true ;

else

return false ;

}

///

1<summary>
2
3///  重载运算符!= 
4
5///  </summary>

///

1<param name="n1"/>

///

1<param name="n2"/>

///

1<returns></returns>

public static bool operator !=(Namer n1,Namer n2)

{

if (n1.FirstName!=n2.FirstName || n1.LastName !=n2.LastName)

return true ;

else

return false ;

}

///

1<summary>
2
3///  重载运算符&gt;
4
5///  </summary>

///

1<param name="n1"/>

///

1<param name="n2"/>

///

1<returns></returns>

public static bool operator >(Namer n1,Namer n2)

{

return (n1.FirstName.CompareTo(n2.FirstName)>0 && n1.LastName.CompareTo(n2.LastName)>0);

}

///

1<summary>
2
3///  重载运算符  &lt;
4
5/// </summary>

///

1<param name="n1"/>

///

1<param name="n2"/>

///

1<returns></returns>

public static bool operator <(Namer n1,Namer n2)

{

return (n1.FirstName.CompareTo(n2.FirstName)<0 && n1.LastName.CompareTo(n2.LastName)<0);

}

///

1<summary>
2
3///  重写方法,必须有,后面的111是乱加的,你也可以写其它的 
4
5///  </summary>

///

1<returns></returns>

public override int GetHashCode()

{

return base .GetHashCode()*111;

}

///

1<summary>
2
3///  重写方法,必须有 
4
5///  </summary>

///

1<param name="obj"/>

///

1<returns></returns>

public override bool Equals( object obj)

{

return base .Equals (obj);

}

///

1<summary>
2
3///  重写方法,必须有 
4
5///  </summary>

///

1<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");

<span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Ro

Published At
Categories with Web编程
Tagged with
comments powered by Disqus