C#学习笔记(6)表达式与运算符
这一章的其他内容不过多赘述(跟C++几乎一致);
6.1运算符和重载
C#运算符被定义为使用预定义类型作为操作数来工作。如果面对一个用户定义类型,运算符完全不知道如何处理它。运算符重载允许你定义C#运算符应该如何操作自定义类型的操作数。
(1)运算符重载只能用于类和结构。
(2)为类或结构重载一个运算符x,可以声明一个名称为operator x的方法并实现它的行为(例如:operator+和operator-等)。
一元运算符的重载方法带一个单独的class或struct类型的参数。
二元运算符的重载方法带两个参数,其中至少有一个必须是class或struct类型。
形如:
public static LimitedInt operator-( LimitedIntx )//一元
public static LimitedInt operator+( LimitedIntx , double y)//二元
运算符重载的方法声明需要:
(1)声明必须同时使用static和public的修饰符;
(2)运算符必须是要操作的类或结构的成员。
例如,下面的代码展示了类Limited Int的两个重载的运算符:加运算符和减运算符。你可以说它是负数而不是减法,因为运算符重载方法只有一个单独的参数,因此是一元的,而减法运算符是二元的。
public static LimitedInt operator + ( LimitedIntx , double y)//二元
(必需的) (类型)( 关键字)(运算符) (操作数)
代码展示:
using System; class LimitedInt { const int MaxValue = 100; const int MinValue = 0; public static LimitedInt operator -(LimitedInt x) { LimitedInt li = new LimitedInt(); li.TheValue = 0; return li; } public static LimitedInt operator -(LimitedInt x,LimitedInt y) { LimitedInt li = new LimitedInt(); li.TheValue = x.TheValue - y.TheValue; return li; } public static LimitedInt operator +(LimitedInt x, double y) { LimitedInt li = new LimitedInt(); li.TheValue = x.TheValue + (int)y; return li; } private int _theValue = 0; public int TheValue { get { return _theValue; } set { if (value < MinValue) _theValue = 0; else _theValue = value > MaxValue ? MaxValue : value; } } } class Program { static void Main() { LimitedInt li1 = new LimitedInt(); LimitedInt li2 = new LimitedInt(); LimitedInt li3 = new LimitedInt(); li1.TheValue = 10; li2.TheValue = 26; Console.WriteLine($"li1:{li1.TheValue}, li 2:{li2.TheValue}"); li3 = -li1; Console.WriteLine($"-{li1.TheValue}={li3.TheValue}"); li3 = li2 - li1; Console.WriteLine($"{li2.TheValue}-{li1.TheValue}={li3.TheValue}"); li3 = li1 - li2; Console.WriteLine($"{li1.TheValue}-{li2.TheValue}={li3.TheValue}"); } }
代码运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人