更新:2007 年 11 月
C# 和 C++ 一樣,都允許多載運算子以供您在自己的類別上使用。這會讓使用者定義資料型別很自然也很合邏輯地做為主要資料型別使用。例如,您可能會建立一個名為 ComplexNumber 的新資料型別來顯示複數,然後再提供方法,以便使用標準算術運算子對這樣的數字執行算術運算,例如使用 + 運算子來相加兩個複數。
若要多載運算子,請撰寫一個函式,在名稱運算子之後加上要多載的運算子符號。例如,可以這樣多載 + 運算子:
public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)
所有運算子多載都是該類別的靜態方法。同時請注意,多載等號比較運算子 (==) 時,必須同時多載不等比較運算子 (!=)。< 和 > 運算子以及 <= 和 >= 運算子也應該要成對進行多載。
以下是可以多載的運算子完整清單:
一元 (Unary) 運算子:+、-、!、~、++、--、true、false
二元 (Binary) 運算子:+、-、*、/、%、&、|、^、<<、>>、==、!=、>、<、>=、<=
下列程式碼範例將建立多載 + 和 - 運算子的 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
Java 不支援運算子多載,不過會在內部多載 + 運算子讓字串串連。