类_封装_运算符重载
基本概念:让自定义的类和结构体能够使用运算符进行运算。
语法:关键词 operator
public static 返回类型 operator 运算符(参数列表)
特点:
- 公共静态方法;
- 返回值写在operator前;
- 逻辑处理自定义;
- 条件运算符需要成对出现,即有>运算符重载,相应就一定要有<运算符重载;一个符号可以多个重载;不能使用ref和out。
可重载与不可重载的运算符:
算数运算符——>+ 二元运算符只能有两个参数;
不可重载的运算符:
- 逻辑与(&&)、逻辑或(||)
- 索引符[ ]
- 强转运算符( )
- 特殊运算符: 点. 三元运算符 ? : 赋值运算符
实例:
class Point
{
public int x;
public int y;
public static Point operator +(Point p1,Point p2)
{
Point p = new Point();
p.x = p1.x + p2.x;
p.y = p1.y + p2.y;
return p;
}
public static Point operator +(Point p1, int value)
{
Point p = new Point();
p.x = p1.x + value;
p.y = p1.y + value;
return p;
}
}
练习题:
namespace L10_封装_运算符重载
{
//练习题一
//定义一个位置结构体或类,为其重载判断是否相等的运算符
//(x1,y1) == (x2,y2) =>两个值同时相等才为true
class Location
{
public int x;
public int y;
public static bool operator ==(Location l1,Location l2)
{
return l1.x == l2.x && l1.y == l2.y;
}
public static bool operator !=(Location l1, Location l2)
{
return l1.x != l2.x || l1.y != l2.y;
}
}
internal class Program
{
static void Main(string[] args)
{
//练习题一:
Location l1 =new Location();
l1.x = 1;
l1.y = 2;
Location l2 =new Location();
l2.x = 1;
l2.y = 2;
if (l1 == l2) { Console.WriteLine("l1和l2两个值相等"); }
else { Console.WriteLine("l1和l2两个值不等"); }
}
}
}