C# – 运算符重载






4.04/5 (10投票s)
C# 中的运算符重载
在本技巧中,我们将讨论 C# 中的运算符重载。
目录
- 问题/场景
- 背景
- 可以重载的运算符的完整列表
- 不能重载的运算符
- 代码解释
- 结论
问题/场景
我们希望使用运算符重载来计算正方形的面积。假设我们有两个不同的正方形。这两个正方形的长度和宽度都不同。我们需要计算两个正方形的总面积。
背景
运算符重载非常类似于方法重载。所有运算符重载方法都是类中的 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;
}
我们有乘法 Length
和 Width
。现在,我们将在 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
分配给 square
为 40
,并将 width
分配给 square
为 40
。
Square _obj2 = new Square();
_obj2.Length = 50;
_obj2.Width = 50;
再次,我们创建了一个名为 _obje2
的对象。我们将 length
分配给 square
为 50
,并将其他 width
分配给 square
为 50
。
Square _obj3 = new Square();
_obj3 = _obj1 * _obj2;
已创建新的 Object
来乘两个对象。
decimal area = _obj3.Area();
Console.WriteLine(area);
Console.ReadKey();
调用了 Area
方法,并将结果分配给 area 变量。
结论
现在我们完成了,因为我们计算了两个 Square
的数量。上图显示了数量的结果。
希望这有帮助。:)