上一篇: 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# 中为自定义类型重载运算符以及如何使用重载运算符。运算符重载有助于提高代码的可读性和可维护性。