平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“C#运算符重载之让对象也能采用“加减乘除””来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
在我们学习C#的时候,我们平时用 "+"、"-"、"*"、"/" 这些运算符,感觉很轻松。比如两个整数直接 "a + b" 就能算出结果。但是,如果我们自己新建了一个类,两个对象能不能直接用 "+" 相加呢?
默认情况下是不行的,这时候就要用到一个东西——运算符重载。
轻松来说,运算符重载就是:我们自己规定某个运算符遇到自己的对象时应该怎么计算。
比如我们新建一个 "Point" 类,用来表示坐标:
class Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
public static Point operator +(Point p1, Point p2)
{
return new Point(p1.X + p2.X, p1.Y + p2.Y);
}
}
这里的重点就是:
public static Point operator +(Point p1, Point p2)
这句话就是在告诉C#:“以后两个 "Point" 对象采用 "+" 的时候,就按照我这里写的规则来。”
采用起来也很轻松:
Point p1 = new Point(10, 20);
Point p2 = new Point(5, 8);
Point p3 = p1 + p2;
Console.WriteLine(p3.X);
Console.WriteLine(p3.Y);
最后得到的就是 "15" 和 "28"。
这样一来,原本不能直接相加的两个对象,现在就能够采用 "+" 了,看起来是不是便于很多?
运算符重载不仅能够重载 "+",像 "-"、"*"、"/"、"=="、"!=" 实际处理时,等很多运算符都能够重载。不过也不是所有运算符都能随便重载,而且重载的时候需遵守C#规定的语法。
你能够先把它理解成一句话:
运算符重载,就是给运算符重新定义一套“玩法”,让它能够按照我们自己的需求操作对象。
在这个场景下,总的来说,C#运算符重载适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。