C# 運算子重載 operator overload

在 C# 中 +, -, !, ~, *, /, %, &, |, ^, <<, >> 等這些都是運算子,也都可以重載。

我們先看一個很簡單的算式:
    
var a = 1;
var b = 2;
var c = a + b;
    

兩個可以相加,沒有什麼問題。

假設我們建立了一個自訂的類別 MyData:
    

public class MyData
{
    public int Id1 { get; set; }
    public int Id2 { get; set; }
}
    

如果同樣使用 + 運算子會出現錯誤:
    
var data1 = new MyData { Id1 = 1, Id2 = 2 };
var data2 = new MyData { Id1 = 3, Id2 = 4 };
var data3 = data1 + data2;
    

提示 MyData 和 MyData 之間無法使用 + 運算子
    
Cannot apply operator '+' to operands of type 'MyData' and 'MyData'
    

這時候我們就可以使用運算子重載(operator overload),手動處理 + 的運算方式:
    
public class MyData
{
    public int Id1 { get; set; }
    public int Id2 { get; set; }

    public static MyData operator +(MyData left, MyData right) =>
        new MyData { Id1 = left.Id1 + right.Id1, Id2 = left.Id2 + right.Id2 };
}
    

需要注意的是運算子重載一定要是 public static

參考資料:
Microsoft.Learn - Operator overloading - predefined unary, arithmetic, equality and comparison operators

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com