C#操作符重载的那点事儿

C#操作符重载是什么?

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站建设、根河网络推广、微信平台小程序开发、根河网络营销、根河企业策划、根河品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供根河建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

是指允许用户使用用户定义的类型编写表达式的能力。

例如,通常需要编写类似于以下内容的代码,以将两个数字相加。很明显,sum 是两个数字之和。

int i = 5;
int sum = i + j;

如果可以使用代表复数的用户定义的类型来编写相同类型的表达式,那当然是***不过了:

Complex i = 5;
Complex sum = i + j;

运算符重载允许为用户定义的类型重载(即指定明确的含义)诸如“+”这样的运算符。如果不进行重载,则用户需要编写以下代码:

Complex i = new Complex(5);
Complex sum = Complex.Add(i, j);

此代码可以很好地运行,但 Complex 类型并不能象语言中的预定义类型那样发挥作用。

在我看来是操作符重载是让struct、class、Interface等能够进行运算。

如时实现C#操作符重载。

先写关键词public和static,后跟返回类型,后跟operator关键词,后跟要声明的操作符符号,***在对一对圆括号中添加恰当的参数。

如下例中的struct Hour中的public static Hour operator+ (Hour lhs,Hour rhs){...}

C#操作符重载方法:

1、编写操作符重载方法。

2、实例化后,进行操作符运算

下边用C#操作符重载代码进行说明:

 
 
 
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Hour hrValue1 = new Hour(10);
  6. Hour hrValue2 = new Hour(20);
  7. //2、得到两个Hour相加结果
  8. Hour hrSum = hrValue1 + hrValue2;
  9. //得到Hour+Int的结果
  10. Hour hrSumInt = hrValue1 + 10;
  11. //得到Int+Hour的结果
  12. Hour hrIntSum = 11 + hrValue2;
  13. Console.WriteLine("hrValue1 +  hrValue2 = {0}", hrSum.iValue);
  14. Console.WriteLine("hrValue1 +  10  = {0}", hrSumInt.iValue);
  15. Console.WriteLine("11 +  hrValue2  = {0}", hrIntSum.iValue);
  16. Console.ReadKey();
  17. }
  18. struct Hour
  19. {
  20. private int value;
  21. //此构造函数根据int值创建Hour类 ,C#操作符重载
  22. public Hour(int iValue)
  23. {
  24. this.value = iValue;
  25. }
  26. //定义一个属性,便于取用value值
  27. public int iValue
  28. {
  29. get
  30. {
  31. return value;
  32. }
  33. } //C#操作符重载
  34. //1、声明一个二元操作符,将两个Hour类加到一起 
  35. public static Hour operator+ (Hour lhs,Hour rhs)
  36. {
  37. return new Hour(lhs.value + rhs.value);
  38. }
  39. /*
  40. 操作符是public的。所有操作符都必须是public的
  41. 操作符是static的。所有操作符都必须是static的,操作永远不具有多态性,
  42. 面且不能使用virtual、abstract、override或者sealed修饰符。
  43. 二元操作符(比如+)有两个显式参数;一元操作符有一个显式的参数
  44. 我们有了public Hour(int iValue)构造函数,就可以将一个int与Hour相加,只是首先要将int转换成为Hour
  45. hour a= ;
  46. int b= ;
  47. Hour sum=a+new Hour(b);
  48. 虽然上述代码完全有效,但相较于让一个Hour和一个int直接相加它即不清晰也不准确。
  49. 为了使Hour可以+ int,必须声明一个二元操作符+,它的***个参数是Hour,第二个参数是一个int。
  50.  C#操作符重载
  51.  */
  52. public static Hour operator+ (Hour lhs,int rhs)
  53. {
  54. return lhs + new Hour(rhs);
  55. }
  56. //使一个int 可以+hour。
  57. public static Hour operator +(int lhs, Hour rhs)
  58. {
  59. return new Hour(lhs)+rhs;
  60. }
  61. }
  62. }

C#操作符重载示例2:

 
 
 
  1. struct Hour
  2. {
  3. public int iValue;
  4. //构造函数
  5. public Hour(int initialValue)
  6. {
  7. this.iValue = initialValue;
  8. }
  9. //1、定义操作符重载(一元操作符)
  10. public static Hour operator ++ (Hour huValue)
  11. {
  12. huValue.iValue++;
  13. return huValue;
  14. }  //C#操作符重载
  15. //==操作符是二元操作符,必须带有两个参数
  16. public static bool operator==(Hour lhs,Hour rhs)
  17. {
  18. return lhs.iValue == rhs.iValue;
  19. }
  20. public static bool operator!=(Hour lhs,Hour rhs)
  21. {
  22. return lhs.iValue != rhs.iValue;
  23. }
  24. }
  25. //++操作符有前缀和后缀的形式,C#能智能地为前缀后后缀使用同一个操作符。
  26. static void Main(string[] args)
  27. {
  28. //2、实例化类  ,C#操作符重载
  29. Hour hu = new Hour(10);
  30. //3、
  31. //操作符重载
  32. hu++;
  33. //输出重载后的结果
  34. Console.WriteLine("Hu++ = {0}", hu.iValue);
  35. //C#操作符重载
  36. ++hu;
  37. //输出重载后的结果
  38. Console.WriteLine("Hu++ = {0}", hu.iValue);
  39. Console.ReadKey();

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

当前标题:C#操作符重载的那点事儿
URL链接:http://www.shufengxianlan.com/qtweb/news43/103393.html

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

广告

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