zoukankan      html  css  js  c++  java
  • C#中的运算符重载(以重载+为例)

    C#中重载运算符的语法和其它语言差不多,比起C++来,它多一个限制,重载运算符的这个方法必须是public static的下面以重载+为例:

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace 运算符重载
    {
        class fushu
        {
            public fushu(int varA, int varB)
            {
                this.A = varA;
                this.B = varB;
            }
    
            //把成员变量定义成公有的只是为了进行演示的方便。
            public int A;
            public int B;
    
            //两个对象相加
            public static fushu operator +(fushu fs1, fushu fs2)
            {
                fushu fs3 = new fushu(0, 0);
                fs3.A = fs1.A + fs2.A;
                return fs3;
            }
    
            //一个对象与一相数字相加
            public static fushu operator +(fushu ft, int num)
            {
                ft = new fushu(0, 0);
                ft.A += num;
                return ft;
            }
    
    
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                fushu fs1 = new fushu(3, 4);
                fushu fs2 = new fushu(10, 20);
    
                fushu fs3 = fs1 + fs2;
                Console.WriteLine(fs3.A);
    
                fushu ft = new fushu(0, 0);
                ft = ft + 20;
                Console.WriteLine(ft.A);
    
                Console.Read();
            }
    
    
        }
    }

    可以看出,重载后的“+“使用起来和普通的"+”没有什么区别,而实际上,系统自动完成了相应的运算符的重载函数的调用过程。具体编译器是怎样解释的还没有去深究。
    下面来具体分析上面的这两个重载。
    第一个:public static fushu operator +(fushu fs1, fushu fs2),这个很多好理解,就是让两个对象的成员相加,然后返回这个对象。
    第二个:public static fushu operator +(fushu ft, int num),初一看也差不多。没什么特别的,就是让一个对象和一个数字相加。实际上,如果是在C++中,这个重载可以只传一个参数num就可以了,在主方法中调用的时候,直接让一个对象与一个数字相加。而C#中不可以,如果写成: public static fushu operator +(fushu ft)会报错::“此一元运算符的参数类型必须是包含类型”。也就是说在进行运算符重载的时候,必须有一个参数是这个类或者结构本身的类型。所以我们可以猜想,如果我们重载的是一个一元运算符,而不是一个二元运算符,那么,也要传一个类或者结构本身的数据类型来。要不然也会报同样的错误。

  • 相关阅读:
    html中的a标签
    dl,dt,dd标签的使用
    MySQL innodb中各种SQL语句加锁分析
    Js字符串与十六进制的相互转换 【转】
    亿级Web系统搭建:单机到分布式集群【转】
    pm2 设置开机启动
    spring cloud 项目相关集成简介
    spring boot下JedisCluster方式连接Redis集群的配置
    并发编程 – Concurrent 用户指南--转
    JDBC 事务和 JTA 事务
  • 原文地址:https://www.cnblogs.com/La5DotNet/p/2546904.html
Copyright © 2011-2022 走看看