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}"); } }
代码运行结果:


浙公网安备 33010602011771号