C#操作符重载

    技术2022-05-20  47

    C#操作符重载是什么?

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

    例如,通常需要编写类似于以下内容的代码,以将两个数字相加。很明显,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#操作符重载代码进行说明:

    class Program   {   static void Main(string[] args)  {  Hour hrValue1 = new Hour(10);  Hour hrValue2 = new Hour(20);    //2、得到两个Hour相加结果 Hour hrSum = hrValue1 + hrValue2;     //得到Hour+Int的结果 Hour hrSumInt = hrValue1 + 10;   //得到Int+Hour的结果 Hour hrIntSum = 11 + hrValue2;  Console.WriteLine("hrValue1 +  hrValue2 = {0}", hrSum.iValue);  Console.WriteLine("hrValue1 +  10  = {0}", hrSumInt.iValue);  Console.WriteLine("11 +  hrValue2  = {0}", hrIntSum.iValue);   Console.ReadKey();  }  struct Hour  {  private int value;   //此构造函数根据int值创建Hour类 ,C#操作符重载 public Hour(int iValue)   {   this.value = iValue;   }   //定义一个属性,便于取用value值 public int iValue   {   get{   return value;   }   } //C#操作符重载 //1、声明一个二元操作符,将两个Hour类加到一起    public  static  Hour operator + (Hour lhs,Hour rhs)   {   return  new  Hour(lhs.value + rhs.value);   }     /*   操作符是public的。所有操作符都必须是public的     操作符是static的。所有操作符都必须是static的,操作永远不具有多态性,     面且不能使用virtual、abstract、override或者sealed修饰符。     二元操作符(比如+)有两个显式参数;一元操作符有一个显式的参数     我们有了public Hour(int iValue)构造函数,就可以将一个int与Hour相加,只是首先要将int转换成为Hour     hour a= ;     int b= ;     Hour sum=a+new Hour(b);     虽然上述代码完全有效,但相较于让一个Hour和一个int直接相加它即不清晰也不准确。     为了使Hour可以+ int,必须声明一个二元操作符+,它的第一个参数是Hour,第二个参数是一个int。    C#操作符重载  */   public  static  Hour operator + (Hour lhs,int  rhs)   {   return  lhs + new  Hour(rhs);   }   //使一个int 可以+hour。   public  static  Hour operator  +(int  lhs, Hour rhs)   {   return  new  Hour(lhs)+rhs;   }   }  

    C#操作符重载示例2:

    struct  Hour   {   public  int  iValue;   //构造函数   public  Hour(int  initialValue)   {   this .iValue = initialValue;   }   //1、定义操作符重载(一元操作符)   public  static  Hour operator  ++ (Hour huValue)   {   huValue.iValue++;   return  huValue;   }  //C#操作符重载   //==操作符是二元操作符,必须带有两个参数   public  static  bool  operator ==(Hour lhs,Hour rhs)   {   return  lhs.iValue == rhs.iValue;   }   public  static  bool  operator !=(Hour lhs,Hour rhs)   {   return  lhs.iValue != rhs.iValue;   }   }     //++操作符有前缀和后缀的形式,C#能智能地为前缀后后缀使用同一个操作符。     static  void  Main(string [] args)   {   //2、实例化类  ,C#操作符重载   Hour hu = new  Hour(10);   //3、   //操作符重载     hu++;   //输出重载后的结果     Console.WriteLine("Hu++ = {0}" , hu.iValue);   //C#操作符重载     ++hu;   //输出重载后的结果     Console.WriteLine("Hu++ = {0}" , hu.iValue);     Console.ReadKey();  

    最新回复(0)