zoukankan      html  css  js  c++  java
  • 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

    C#中,下列操作符都是可以重载的:

    + - ! ~ ++ -- true false

    * / % & | ^ << >> == != > < >= <=

    但也有一些操作符是不允许进行重载的,如:

    =,&&,||,?:,new,typeof,sizeof,is

  • 相关阅读:
    在webBrowser中取Cookie的方法
    C#遍历DataSet中数据的几种方法总结
    php数组排序函数
    linux top命令详解
    HTTPSQS(HTTP Simple Queue Service)消息队列
    mysql 触发器(trigger) 总结
    HDU4292 Food —— 最大流 + 拆点
    POJ1459 Power Network —— 最大流
    POJ2516 Minimum Cost —— 最小费用最大流
    HDU4280 Island Transport —— 最大流 ISAP算法
  • 原文地址:https://www.cnblogs.com/melao2006/p/4239495.html
Copyright © 2011-2022 走看看