上一篇: C# 多态性
下一篇: C# 接口(Interface)
C# 运算符重载
在本教程中,将介绍 C# 语言中的运算符重载。运算符重载允许您为自定义类型(如类或结构体)自定义内置运算符的行为。这使得用户能够使用熟悉的运算符来操作自定义类型的实例。
基本概念
以下是一些与运算符重载相关的基本概念:
- 重载运算符 :用于自定义类型的内置运算符,例如
+
、-
、*
和/
。 - 静态方法 :运算符重载方法必须是静态方法,因为它们不依赖于类实例。
- 关键字
operator
:用于声明重载运算符的特殊关键字。
创建自定义类型
首先,创建一个简单的自定义类型 Vector
,包含两个属性(X 和 Y),用于表示平面上的二维向量。
public class Vector { public double X { get; set; } public double Y { get; set; } public Vector(double x, double y) { X = x; Y = y; } public override string ToString() { return $"({X}, {Y})"; } }
重载运算符
接下来,为 Vector
类添加加法运算符重载。要重载加法运算符(+
),需要创建一个静态方法,名为 operator +
,该方法接受两个
Vector
类型的参数并返回一个新的 Vector
对象。
public class Vector { // ... 属性和构造函数 ... public static Vector operator +(Vector v1, Vector v2) { return new Vector(v1.X + v2.X, v1.Y + v2.Y); } }
使用重载运算符
现在可以使用自定义加法运算符来对两个 Vector
对象求和。
class Program { static void Main(string[] args) { Vector v1 = new Vector(1, 2); Vector v2 = new Vector(3, 4); Vector sum = v1 + v2; Console.WriteLine($"v1: {v1}"); Console.WriteLine($"v2: {v2}"); Console.WriteLine($"Sum: {sum}"); Console.ReadLine(); } }
输出结果:
v1: (1, 2) v2: (3, 4) Sum: (4, 6)
示例:重载其他运算符
以下示例演示如何为 Vector
类重载减法、乘法和除法运算符。
public class Vector { // ... 属性和构造函数 ... // 加法运算符重载 public static Vector operator +(Vector v1, Vector v2) { return new Vector(v1.X + v2.X, v1.Y + v2.Y); } // 减法运算符重载 public static Vector operator -(Vector v1, Vector v2) { return new Vector(v1.X - v2.X, v1.Y - v2.Y); } // 乘法运算符重载 public static Vector operator *(Vector v, double scalar) { return new Vector(v.X * scalar, v.Y * scalar); } // 除法运算符重载 public static Vector operator /(Vector v, double scalar) { return new Vector(v.X / scalar, v.Y / scalar); } }
这些重载运算符使得对 Vector
对象执行各种数学操作变得更加直观。
小结
通过本教程,您已学会如何在 C# 中为自定义类型重载运算符以及如何使用重载运算符。运算符重载有助于提高代码的可读性和可维护性。