運算符重載
與 C++ 一樣,C# 允許我們重載運算符,以供在我們自己的類中使用。這可能使得用戶定義的數據類型看起來很自然,並且可以在邏輯上作為基本數據類型使用。例如,我們可以創建一個新的名為 Complex 的數據類型來表示一個復雜的數字,並且提供一些方法,以使用標准的算術運算符對這樣的數字進行算術運算,例如使用 + 運算符來使兩個復雜的數字相加。
為了重載一個運算符,我們編寫了一個函數,它將需要重載的運算符的符號放在名稱 Operator 的後面。例如,我們可以這樣來重載 + 運算符:
public static complex Operator+(complex lhs, complex rhs)
所有的運算符重載都是類的靜態方法。同時也需要注意,如果您重載等於運算符 (==),您還必須重載不等於運算符 (!=)。
可以重載的運算符的完整列表如下:
• 一元運算符: +, -, !, ~, ++, --, true, false • 二元運算符: +, -, *, /, %, &, |, ^, <<, >>, ==, !=, >, <, >=, <=下一個示例創建了一個 Complex 類,該類重載 + 和 - 運算符:
using System;
public class complex
{
private float real;
private float img;
public complex(float p, float q)
{
real = p;
img = q;
}
public complex()
{
real = 0;
img = 0;
}
public void Print()
{
Console.WriteLine("{0} + {1}i", real, img);
}
// Overloading '+' Operator
public static complex Operator+(complex lhs, complex rhs)
{
complex sum = new complex();
sum.real = lhs.real + rhs.real;
sum.img = lhs.img + rhs.img;
return (sum);
}
// Overloading '-' Operator
public static complex Operator-(complex lhs, complex rhs)
{
complex result = new complex();
result.real = lhs.real - rhs.real;
result.img = lhs.img - rhs.img;
return (result);
}
}