写点什么

C#入门系列 (三十一) -- 运算符重载

作者:陈言必行
  • 2022 年 7 月 26 日
  • 本文字数:1225 字

    阅读完需:约 4 分钟

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


一般语法格式:


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


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

可重载和不可重载运算符


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; }

}}
复制代码



发布于: 20 小时前阅读数: 11
用户头像

陈言必行

关注

公号:开发同学留步 2019.03.12 加入

我是一个从事Unity游戏开发攻城狮,6年开发经验,助你日常不加班。

评论

发布
暂无评论
C#入门系列(三十一) -- 运算符重载_七月月更_陈言必行_InfoQ写作社区