C# 运算符重载简介

举报
陈言必行 发表于 2021/08/14 00:50:01 2021/08/14
【摘要】 C#运算符重载 重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。 //格式: //修饰符 返回值类型 operator 可重载的运算符(参数列表) public static Student operator +(Student a, Student b) { //方法体; }...

C#运算符重载

重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。

//格式:
//修饰符 返回值类型 operator 可重载的运算符(参数列表)
public static Student operator +(Student a, Student b)
{ //方法体;
} 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运算符重载的其实就是函数重载。首先通过指定的运算表达式调用对应的运算符函数,然后再将运算对象转化为运算符函数的实参,接着根据实参的类型来确定需要调用的函数的重载,这个过程是由编译器完成。

可重载和不可重载运算符

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

C# 要求成对重载比较运算符。如果重载了==,则也必须重载!=,否则产生编译错误。同时,比较运算符必须返回bool类型的值,这是与其他算术运算符的根本区别。


下面以重载“+”运算符,为例:(重载“+”编译器会自动重载“+=”);

using System;

namespace _6_2_1运算符重载
{ class Program { static void Main(string[] args) { Student st1 = new Student(); Student st2 = new Student(); Student st3 = new Student(); st1._acore = 40; st2._acore = 50; Console.WriteLine("st1和st2成绩是否相同:" + (st1 == st2)); Console.WriteLine("st1和st2成绩是否相同:" + (st1 != st2)); Console.WriteLine("运算前成绩:{0},{1},{2}", st1._acore, st2._acore, st3._acore); //对象相加 st3 = st1 + st2; //编译器自动重载+= st1 += st2; Console.WriteLine("运算后成绩:{0},{1},{2}",st1._acore,st2._acore,st3._acore); Console.ReadKey(); } } class Student { private int acore; public int _acore { get { return acore; } set { acore = value; } } //+重载: 对象加法,求得学生成绩和 public static Student operator +(Student b, Student c) { Student stu = new Student(); stu.acore = b.acore + c.acore; return stu; } //当重载==时,必须重载!=,否则编译报错 public static bool operator ==(Student b , Student c) { bool result = false; if(b.acore == c.acore) { result = true; } return result; } public static bool operator !=(Student b, Student c) { bool result = false; if (b.acore != c.acore) { result = true; } return result; } }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

输出结果:

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/80151862

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。