新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > .Net开发 > Asp.net教程 > 正文:C#中奇妙的操作符重载

C#中奇妙的操作符重载

新客网 XKER.COM 2004-07-14 来源: 收藏本文
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();

}



}

}

收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐