C# 也允許您重載運算子,以供您自己的類使用。這樣做,可以使使用使用者定義的資料類型就像使用基礎資料型別 (Elementary Data Type)一樣自然、合理。例如,您可以建立一個名為 ComplexNumber 的新資料類型來表示一個複雜的數字,並提供使用標準算術運算子對此類數字執行數學運算的方法,如使用 + 運算子將兩個複雜數字相加。
若要重載某個運算子,可以編寫一個函數,在其命名運算子之後加上要重載的運算子的符號。例如,可按以下方法重載 + 運算子:
public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)
所有運算子多載均為類的靜態方法。此外還應注意,重載相等運算子 (==) 時,還必須重載不相等運算子 (!=)。< 和 > 運算子以及 <= 和 >= 運算子也必須成對重載。
以下是可重載的運算子的完整列表:
- 一元運算子:+、-、!、~、++、--、true、false
- 二元運算子:+, -, *, /, %, &, |, ^, <<, >>, ==, !=, >, <, >=, <=
下面的程式碼範例建立一個重載 + 和 - 運算子的 ComplexNumber 類:
代碼
public class ComplexNumber
{
private int real;
private int imaginary;
public ComplexNumber() : this(0, 0) // constructor
{
}
public ComplexNumber(int r, int i) // constructor
{
real = r;
imaginary = i;
}
// Override ToString() to display a complex number in the traditional format:
public override string ToString()
{
return(System.String.Format("{0} + {1}i", real, imaginary));
}
// Overloading '+' operator:
public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)
{
return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary);
}
// Overloading '-' operator:
public static ComplexNumber operator-(ComplexNumber a, ComplexNumber b)
{
return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary);
}
}
使用這個類,您就可以用以下代碼建立和操作兩個複雜的數字:
代碼
class TestComplexNumber
{
static void Main()
{
ComplexNumber a = new ComplexNumber(10, 12);
ComplexNumber b = new ComplexNumber(8, 9);
System.Console.WriteLine("Complex Number a = {0}", a.ToString());
System.Console.WriteLine("Complex Number b = {0}", b.ToString());
ComplexNumber sum = a + b;
System.Console.WriteLine("Complex Number sum = {0}", sum.ToString());
ComplexNumber difference = a - b;
System.Console.WriteLine("Complex Number difference = {0}", difference.ToString());
}
}
如程式所示,您現在可以用非常直觀的方式對屬於 ComplexNumber 類的對象使用加減運算子。結果如下:
Complex Number a = 10 + 12i
Complex Number b = 8 + 9i
Complex Number sum = 18 + 21i
Complex Number difference = 2 + 3i