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. ///    
  10.  
  11. /// 姓名类   
  12.  
  13. ///    
  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. ///    
  50.  
  51. /// 重载运算符true   
  52.  
  53. ///    
  54.  
  55. ///    
  56.  
  57. /// 如果姓名中姓或名有一个为空,就返回假   
  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. ///    
  74.  
  75. /// 重载运算符false   
  76.  
  77. ///    
  78.  
  79. ///    
  80.  
  81. ///    
  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. ///    
  98.  
  99. /// 重载运算符==   
  100.  
  101. ///    
  102.  
  103. ///    
  104.  
  105. ///    
  106.  
  107. ///    
  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. ///    
  124.  
  125. /// 重载运算符!=   
  126.  
  127. ///    
  128.  
  129. ///    
  130.  
  131. ///    
  132.  
  133. ///    
  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. ///    
  150.  
  151. /// 重载运算符>   
  152.  
  153. ///    
  154.  
  155. ///    
  156.  
  157. ///    
  158.  
  159. ///    
  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. ///    
  171.  
  172. /// 重写方法,必须有,后面的111是乱加的,你也可以写其它的   
  173.  
  174. ///    
  175.  
  176. ///    
  177.  
  178. public override int GetHashCode()   
  179.  
  180. {   
  181.  //C#操作符重载特点实例
  182. return base.GetHashCode()*111;   
  183.  
  184. }   
  185.  
  186. ///    
  187.  
  188. /// 重写方法,必须有   
  189.  
  190. ///    
  191.  
  192. ///    
  193.  
  194. ///    
  195.  
  196. public override bool Equals(object obj)   
  197.  
  198. {   
  199.  
  200. return base.Equals (obj);   
  201.  
  202. }   
  203.  
  204. ///    
  205.  
  206. /// 重写方法,必须有   
  207.  
  208. ///    
  209.  
  210. ///    
  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
  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#操作符重载应用的一点体会

本文题目:C#操作符重载特点实例浅析
分享链接:http://www.shufengxianlan.com/qtweb/news22/488072.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联