点击这里给我发消息 点击这里给我发消息

C#运算符重载

添加时间:2013-12-7
    相关阅读: C#
 

一、C#运算符重载

1. C#运算符重载

运算符重载是指允许用户使用自己定义的类型编写运算符号,同时还允许用户定义的类型与预定义的类型具有相同的功能。

重载运算符的目的是方便我们自己的类或结构使用。所有运算符重载均为类或结构的静态方法。

因此,在C#语言中,允许用户定义的类型通过使用operator关键字定义成静态成员函数的形式来重载运算符。operator关键字用于在类或结构声明中声明运算符。

2. 运算符的可重载性

在C#中,并不是所有的运算符都可以被重载的。下表列出了运算符的可重载性:

注意:如果重载比较运算符,就必须成对重载;也就是说,如果重载“==”,也必须重载“!=”。反之也是这样。“<”和“>”以及“<=”和“>=”同样如此。

3. 重载一元运算符

一元运算符只有一个参数。

public static return-type operator op(type operand)
{
    // statement;
}

4. 重载二元运算符

二元运算符有两个参数。

public static return-type operator op(type operand1, type operand2)
{
    // statement;
}

二、提示
 
C#运算符重载的声明方式与方法的声明方式相同,但operator关键字告诉编译器,它实际上是一个运算符重载,后面是相关运算符的符号,返回类型是在使用这个运算符时获得的类型。

C#要求所有的C#运算符重载都声明为public和static,这表示它们与它们的类或结构相关联,而不是与实例相关联所以运算符重载的代码体不能访问非静态成员,也不能访问this标识符。

三、示例
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{

  public class ComplexNumber
  {
    private int real;
    private int imaginary;
    public ComplexNumber() : this(0, 0)  // constructor
    {
    }
    public ComplexNumber(int r, int i)  // constructor
    {
      real = r;
      imaginary = i;
    }
    //Override ToString() to display a complex number in the traditional format
    public override string ToString()
    {
      return(System.String.Format("{0} + {1}i", real, imaginary));
    }
    // 重载“+”操作符
    public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)
    {
      return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary);
    }
    // 重载“'-”操作符
    public static ComplexNumber operator-(ComplexNumber a, ComplexNumber b)
    {
      return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary);
    }
  }

  class Program
  {
    static void Main(string[] args)
    {
      // C#运算符重载-www.baike369.com
      ComplexNumber a = new ComplexNumber(10, 12);
      ComplexNumber b = new ComplexNumber(8, 9);
      Console.WriteLine("Complex Number a = {0}", a.ToString());
      Console.WriteLine("Complex Number b = {0}", b.ToString());
      ComplexNumber sum = a + b;
      Console.WriteLine("Complex Number sum = {0}", sum.ToString());
      ComplexNumber difference = a - b;
      Console.WriteLine("Complex Number difference = {0}",
              difference.ToString());
      Console.ReadLine();
    }
  }
}

运行结果:
 
Complex Number a = 10 + 12i
Complex Number b = 8 + 9i
Complex Number sum = 18 + 21i
Complex Number difference = 2 + 3i

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册