C#操作符重载特点实例浅析

开发 后端
C#操作符重载有什么特点呢?C#操作符重载实现的时候有什么突出的地方么?那么本文就向你介绍C#操作符重载的内容,希望对你有所帮助。

C#操作符重载特点是什么呢?

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

以下是C#操作符重载特点实例程序代码,有些地方写得不完善,只能说仅仅说明了问题,不对之处请指教:

  1. using System;   
  2.  
  3. using System.Xml;   
  4.  
  5. namespace ConsoleApplication8   
  6.  
  7. {   
  8.  
  9. /// <summary>   
  10.  
  11. /// 姓名类   
  12.  
  13. /// </summary>   
  14.  
  15. class Namer   
  16.  //C#操作符重载特点实例
  17. {   
  18.  
  19. private string FirstName;   
  20.  
  21. private string LastName;   
  22.  
  23. public Namer()   
  24.  
  25. {   
  26.  
  27. this.Init(null,null);   
  28.  
  29. }   
  30.  
  31. public Namer(string fn,string ln)   
  32.  
  33. {   
  34.  
  35. this.Init(fn,ln);   
  36.  
  37. }   
  38.  //C#操作符重载特点实例
  39. private void Init(string fn,string ln)   
  40.  
  41. {   
  42.  
  43. this.FirstName=fn;   
  44.  
  45. this.LastName=ln;   
  46.  
  47. }   
  48.  
  49. /// <summary>   
  50.  
  51. /// 重载运算符true   
  52.  
  53. /// </summary>   
  54.  
  55. /// <param name="n"></param>   
  56.  
  57. /// <returns>如果姓名中姓或名有一个为空,就返回假</returns>   
  58.  
  59. public static bool operator true(Namer n)   
  60.  
  61. {   
  62.  
  63. if(n.FirstName==null || n.LastName==null)   
  64.  
  65. return false;   
  66.  
  67. else   
  68.  
  69. return true;   
  70.  
  71. }   
  72.  
  73. /// <summary>   
  74.  
  75. /// 重载运算符false   
  76.  
  77. /// </summary>   
  78.  
  79. /// <param name="n"></param>   
  80.  
  81. /// <returns></returns>   
  82.  
  83. public static bool operator false(Namer n)   
  84.  
  85. {   
  86.  
  87. if(n.FirstName==null || n.LastName==null)   
  88.  
  89. return false;   
  90.  
  91. else   
  92.  //C#操作符重载特点实例
  93. return true;   
  94.  
  95. }   
  96.  
  97. /// <summary>   
  98.  
  99. /// 重载运算符==   
  100.  
  101. /// </summary>   
  102.  
  103. /// <param name="n1"></param>   
  104.  
  105. /// <param name="n2"></param>   
  106.  
  107. /// <returns></returns>   
  108.  
  109. public static bool operator ==(Namer n1,Namer n2)   
  110.  
  111. {   
  112.  
  113. if(n1.FirstName==n2.FirstName 
  114. && n1.LastName==n2.LastName)   
  115.  
  116. return true;   
  117.  
  118. else   
  119.  //C#操作符重载特点实例
  120. return false;   
  121.  
  122. }   
  123. /// <summary>   
  124.  
  125. /// 重载运算符!=   
  126.  
  127. /// </summary>   
  128.  
  129. /// <param name="n1"></param>   
  130.  
  131. /// <param name="n2"></param>   
  132.  
  133. /// <returns></returns>   
  134.  
  135. public static bool operator !=(Namer n1,Namer n2)   
  136.  
  137. {   
  138.  
  139. if(n1.FirstName!=n2.FirstName || n1.LastName !=n2.LastName)   
  140.  
  141. return true;   
  142.  
  143. else   
  144.  
  145. return false;   
  146.  
  147. }   
  148.  
  149. /// <summary>   
  150.  
  151. /// 重载运算符>   
  152.  
  153. /// </summary>   
  154.  
  155. /// <param name="n1"></param>   
  156.  
  157. /// <param name="n2"></param>   
  158.  
  159. /// <returns></returns>   
  160.  //C#操作符重载特点实例
  161. public static bool operator >(Namer n1,Namer n2)   
  162.  
  163. {   
  164.  
  165. return (n1.FirstName.CompareTo(n2.FirstName)>0 
  166. && n1.LastName.CompareTo(n2.LastName)>0);   
  167.  
  168. }   
  169.  
  170. /// <summary>   
  171.  
  172. /// 重写方法,必须有,后面的111是乱加的,你也可以写其它的   
  173.  
  174. /// </summary>   
  175.  
  176. /// <returns></returns>   
  177.  
  178. public override int GetHashCode()   
  179.  
  180. {   
  181.  //C#操作符重载特点实例
  182. return base.GetHashCode()*111;   
  183.  
  184. }   
  185.  
  186. /// <summary>   
  187.  
  188. /// 重写方法,必须有   
  189.  
  190. /// </summary>   
  191.  
  192. /// <param name="obj"></param>   
  193.  
  194. /// <returns></returns>   
  195.  
  196. public override bool Equals(object obj)   
  197.  
  198. {   
  199.  
  200. return base.Equals (obj);   
  201.  
  202. }   
  203.  
  204. /// <summary>   
  205.  
  206. /// 重写方法,必须有   
  207.  
  208. /// </summary>   
  209.  
  210. /// <returns></returns>   
  211.  
  212. public override string ToString()   
  213.  
  214. {   
  215.  
  216. return "姓:"+this.FirstName+" 名:"+this.LastName;   
  217.  
  218. }   
  219.  
  220. public static void Main()   
  221.  
  222. {   
  223.  
  224. Namer n1=new Namer("li","zanhong");   
  225.  
  226. Namer n2=new Namer("ahang","aan");   
  227.  
  228. //Namer n2=new Namer("li","zanhong");   
  229.  
  230. if(n1==n2)   
  231.  
  232. Console.WriteLine("一样的名字");   
  233.  
  234. else   
  235.  //C#操作符重载特点实例
  236. Console.WriteLine("不一样的名字");   
  237.  
  238. /////////////////////////////////////   
  239.  
  240. if(n1!=n2)   
  241.  
  242. Console.WriteLine("不一样的名字成立");   
  243.  
  244. else   
  245.  
  246. Console.WriteLine("同样的名字成立");   
  247.  
  248. /////////////////////////////////////   
  249.  
  250. if(n1>n2)   
  251.  
  252. Console.WriteLine(n1.ToString()+">"+n2.ToString());   
  253.  
  254. else if(n1<n2)   
  255.  
  256. Console.WriteLine(n1.ToString()+"<"+n2.ToString());   
  257.  
  258. else   
  259.  
  260. Console.WriteLine("没有正确比较");   
  261.  
  262. Console.ReadLine();   
  263.  
  264. }   
  265.  
  266. }   
  267.  

C#操作符重载特点实例的基本内容就向你介绍到这里,希望对你了解和学习C#操作符重载有所帮助。

【编辑推荐】

  1. C# 操作XML的全过程实例浅析
  2. C#操作xml文件实例详解
  3. C#操作XML文件学习综合体会
  4. C#操作符重载学习的一点总结
  5. C#操作符重载应用的一点体会
责任编辑:仲衡 来源: host01.com
相关推荐

2009-08-18 18:06:54

C#操作符重载

2009-08-12 10:27:12

C#运算符重载运算符重载实例

2009-08-19 17:26:28

C# 操作符

2009-08-19 17:20:22

C# 操作符

2009-08-18 17:55:20

C#操作符重载

2009-07-14 18:34:22

Jython操作符重载

2009-08-19 17:38:17

C# 操作符分类

2009-08-12 12:46:11

C#运算符重载

2009-08-18 17:34:25

C#操作符重载应用

2009-08-18 17:20:17

C#操作符重载

2010-01-19 13:32:20

C++操作符

2009-08-12 10:56:47

C#运算符重载C#运算符重载实例

2009-08-27 13:05:06

C#接口特点C#接口实例

2009-08-18 13:49:21

C# 操作Excel

2010-02-05 10:30:02

C++操作符重载

2009-09-15 17:16:58

LINQ查询操作符

2009-07-31 16:00:30

C#函数重载

2010-02-03 10:23:47

C++操作符重载

2009-08-18 16:04:12

C# 操作Excel

2009-08-19 09:42:52

C#操作Word书签
点赞
收藏

51CTO技术栈公众号