最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

C#中的运算符重载

CSharp 宇托 215浏览 暂无评论

在C#中,和C++语言一样,也支持运算符重载。

我们可以重载一元运算符,二元运算符,以及比较比较运算符。如下表

运算符 可重载性
+, -, !, ~, ++, --, true, false 可以重载这些一元运算符。
+, -, *, /, %, &, |, ^, <<, >> 可以重载这些二元运算符。
==, !=, <, >, <=, >= 可以重载这些比较运算符(但请参见下面的说明)。
&&, || 不能重载条件逻辑运算符,但可使用 & 和
[] 不能重载数组索引运算符,但可定义索引器。
() 不能重载转换运算符,但可定义新的转换运算符(请参见 explicit 和 implicit)。
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= 不能重载运算赋值运算符,但能使用重载的二元运算符运算。
=, ., ?:, ->, new, is, sizeof, typeof 不能重载这些运算符。

要注意的是

  1. 以下几个运算符是成对出现的,只要定义其中一个,就必须定义另一个:truefalse==!=<><=>=
  2. &&||可以分别使用&|进行计算,必须定义好truefalse运算符,而且&|返回值和两个参数值类型一致。x && yT.false(x) ? x : T.&(x, y)进行计算;x || yT.true(x) ? x : T.|(x, y)进行计算。
  3. 二元运算符左运算数和右运算数类型不相同时,如果只定义一个,只能运算一个。比如定义了public static T operator +(T x, B y),那样只能运算T + B,不能运算B + T
  4. 要使用运算赋值运算符(例:+=),必须定义其对应的二元运算符,而且其第一个参数值和返回值必须一致。
  5. truefalse单判断的ifwhile语句,如if(new T())while(new T())

运算符重载的例子

C#
using System;

public struct Complex 
{
   public int real;
   public int imaginary;

   public Complex(int real, int imaginary) 
   {
      this.real = real;
      this.imaginary = imaginary;
   }

   // Declare which operator to overload (+), the types 
   // that can be added (two Complex objects), and the 
   // return type (Complex):
   public static Complex operator +(Complex c1, Complex c2) 
   {
      return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
   }
   // Override the ToString method to display an complex number in the suitable format:
   public override string ToString()
   {
      return(String.Format("{0} + {1}i", real, imaginary));
   }

   public static void Main() 
   {
      Complex num1 = new Complex(2,3);
      Complex num2 = new Complex(3,4);

      // Add two Complex objects (num1 and num2) through the
      // overloaded plus operator:
      Complex sum = num1 + num2;

      // Print the numbers and the sum using the overriden ToString method:
      Console.WriteLine("First complex number:  {0}",num1);
      Console.WriteLine("Second complex number: {0}",num2);
      Console.WriteLine("The sum of the two numbers: {0}",sum);
 
   }
}

参考资料:

  1. 可重载的运算符 @msdn.microsoft.com
  2. 运算符重载(C# 与 Java) @msdn.microsoft.com
  3. 运算符重载教程 @msdn.microsoft.com

转载请注明:宇托的狗窝 » C#中的运算符重载

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址