65.9K
CodeProject 正在变化。 阅读更多。
Home

C# – 运算符重载

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.04/5 (10投票s)

2016年10月2日

CPOL

2分钟阅读

viewsIcon

16845

downloadIcon

1

C# 中的运算符重载

在本技巧中,我们将讨论 C# 中的运算符重载。

目录

  • 问题/场景
  • 背景
  • 可以重载的运算符的完整列表
  • 不能重载的运算符
  • 代码解释
  • 结论

问题/场景

我们希望使用运算符重载来计算正方形的面积。假设我们有两个不同的正方形。这两个正方形的长度和宽度都不同。我们需要计算两个正方形的总面积。

square

图:正方形

背景

运算符重载非常类似于方法重载。所有运算符重载方法都是类中的 static 方法。运算符将在类的对象之间使用。在这里,我将使用 Visual Studio 的控制台应用程序。

可以重载的运算符的完整列表是

  • 一元运算符:+,-,!,~,++,--,true,false
  • 二元运算符:+,-,*,/,%,&,|,^,<<,>>,==,!=,>,<,>=,<=

不能重载的运算符是

=,&&,||,?:,Checked, new, typeof, as, 和 is 运算符。

现在,我们将创建一个 Square 类。以下是代码:

public class Square
    {
        public decimal Length { set; get; }
        public decimal Width { set; get; }

        public static Square operator *(Square _squareObj1, Square _squareObj2)
        {
            Square _squareObj = new Square();
            _squareObj.Length = _squareObj1.Length * _squareObj2.Length;
            _squareObj.Width = _squareObj1.Width * _squareObj2.Width;
            return _squareObj;
        }

        public decimal Area()
        {
            return Length * Width;
        }
    }

让我们解释一下代码

public class Square

这里,square 是类名。

public decimal Length { set; get; }
public decimal Width { set; get; }

Square 类有两个属性。一个是 Length,具有 decimal 数据类型。另一个是 width,具有 decimal 类型。

        public static Square operator *(Square _squareObj1, Square _squareObj2)
        {
            Square _squareObj = new Square();
            _squareObj.Length = _squareObj1.Length * _squareObj2.Length;
            _squareObj.Width = _squareObj1.Width * _squareObj2.Width;
            return _squareObj;
        }

上述方法实现了用户定义类 Square 的乘法运算符 (*)。此方法是一个 static 方法,具有两个参数。两者都是 Square 类的对象,并且在两个对象上执行乘法运算。

public decimal Area()
{
    return Length * Width;
}

我们有乘法 LengthWidth现在,我们将在 Main 函数中调用 Square 类:

class Program
    {
        static void Main(string[] args)
        {
            // First Square 
            Square _obj1 = new Square();
            _obj1.Length = 40;
            _obj1.Width = 40;

            // Second Square 
            Square _obj2 = new Square();
            _obj2.Length = 50;
            _obj2.Width = 50;

            // For match tow Object 
            Square _obj3 = new Square();
            _obj3 = _obj1 * _obj2;

            // Assign area to variable
            decimal area = _obj3.Area();
            Console.WriteLine(area);
            Console.ReadKey();
        }
    }

让我们解释一下代码:我们计算了两个正方形的总面积。

 Square _obj1 = new Square();
_obj1.Length = 40;
 _obj1.Width = 40;

我们创建了一个名为 given _obje1 的对象。我们将 length 分配给 square40,并将 width 分配给 square40

Square _obj2 = new Square();
 _obj2.Length = 50;
 _obj2.Width = 50;

再次,我们创建了一个名为 _obje2 的对象。我们将 length 分配给 square50,并将其他 width 分配给 square50

Square _obj3 = new Square();
 _obj3 = _obj1 * _obj2;

已创建新的 Object 来乘两个对象。

decimal area = _obj3.Area();
Console.WriteLine(area);
Console.ReadKey();

调用了 Area 方法,并将结果分配给 area 变量。

34324

结论

现在我们完成了,因为我们计算了两个 Square 的数量。上图显示了数量的结果。

希望这有帮助。:)

© . All rights reserved.