当前位置: 首页 > news >正文

C# 运算符重载 之前的小总结

C# 中支持运算符重载,所谓运算符重载就是我们可以使用自定义类型来重新定义 C# 中大多数运算符的功能。运算符重载需要通过 operator 关键字后跟运算符的形式来定义的,我们可以将被重新定义的运算符看作是具有特殊名称的函数,与其他函数一样,该函数也有返回值类型和参数列表,如下例所示:

public static Box operator+ (Box b, Box c) {Box box = new Box();box.length = b.length + c.length;box.breadth = b.breadth + c.breadth;box.height = b.height + c.height;return box;
}

重点
运算符重载格式

public static ClassName operator##op (ele) {//something
}

下表描述了 C# 中运算符重载的能力:

运算符 描述

运算符描述
+, -, !, ~, ++, –这些一元运算符只有一个操作数,且可以被重载。
+, -, *, /, %这些二元运算符带有两个操作数,且可以被重载。
==, !=, <, >, <=, >=这些比较运算符可以被重载。
&&, ||这些条件逻辑运算符不能被直接重载。
+=, -=, *=, /=, %=这些赋值运算符不能被重载。
=, ., ?:, ->, new, is, sizeof, typeof这些运算符不能被重载。

细看

using System;//主程序入口
class TODO {static void Main() {Console.WriteLine("Hello C#!");ComplexNumber a = new ComplexNumber(1, 2);ComplexNumber b = new ComplexNumber(2, 5);ComplexNumber c = new ComplexNumber();c = a + b;Console.WriteLine("c = {0} + {1}i",c.real, c.imaginary);double rea, imb;c.linkA(out rea).linkB(out imb);Console.WriteLine("rea = {0}, imb = {1}", rea, imb);}
}class ComplexNumber{//私有成员 实部和虚部private double Real;private double Imaginary;//get setpublic double real {get { return Real; } set { Real = value;  }    }public double imaginary {get { return Imaginary; }set { Imaginary = value; }}//含参构造public ComplexNumber(double re = 0.0, double im = 0.0) {real = re;imaginary = im;}~ComplexNumber() { }//运算符重载public static ComplexNumber operator+ (ComplexNumber a, ComplexNumber b) {ComplexNumber c = new ComplexNumber(0, 0);c.real = a.real + b.real;c.imaginary = a.imaginary + b.imaginary;return c;}//链式调用public ComplexNumber linkA(out double re) {re = real;return this;}public ComplexNumber linkB(out double im) {im = imaginary;return this;}}
http://www.lryc.cn/news/330816.html

相关文章:

  • XenCenter 2024 创建一个虚拟机
  • tomcat 知多少
  • 【详细讲解语言模型的原理、实战与评估】
  • Predict the Next “X” ,第四范式发布先知AIOS 5.0
  • PCL使用4PCS配准
  • 【六 (2)机器学习-机器学习建模步骤/kaggle房价回归实战】
  • vue源码解析——vue如何将template转换为render函数
  • 深入理解zookeeper
  • 【漏洞复现】WordPress Plugin LearnDash LMS 敏感信息暴漏
  • phpmyadmin页面getshell
  • 题目:学习static定义静态变量的用法
  • 【C++】编程规范之函数规则
  • HTML常用的图片标签和超链接标签
  • 浏览器工作原理与实践--WebAPI:XMLHttpRequest是怎么实现的
  • TCP网络协议栈和Posix网络部分API总结
  • 《解释器模式(极简c++)》
  • c#仿ppt案例
  • 10.图像高斯滤波的原理与FPGA实现思路
  • WebGIS 地铁交通线网 | 图扑数字孪生
  • Docker 哲学 - push 本机镜像 到 dockerhub
  • 大数据学习第十二天(hadoop概念)
  • 管理科学笔记
  • WebKit结构简介
  • Kaggle:收入分类
  • 【Go】十七、进程、线程、协程
  • 深入剖析JavaScript中的this(上)
  • Junit深入讲解(JAVA单元测试框架)
  • Spring boot如何执行单元测试?
  • Django详细教程(一) - 基本操作
  • Qt编译QScintilla(C++版)过程记录,报错-lqscintilla2_qt5d、libqscintilla2_qt5找不到问题解决