在 C# 中 +, -, !, ~, *, /, %, &, |, ^, <<, >> 等這些都是運算子,也都可以重載。
我們先看一個很簡單的算式:
兩個可以相加,沒有什麼問題。
假設我們建立了一個自訂的類別 MyData:
如果同樣使用 + 運算子會出現錯誤:
提示 MyData 和 MyData 之間無法使用 + 運算子
這時候我們就可以使用運算子重載(operator overload),手動處理 + 的運算方式:
需要注意的是運算子重載一定要是 public static
參考資料:
Microsoft.Learn - Operator overloading - predefined unary, arithmetic, equality and comparison operators
我們先看一個很簡單的算式:
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
感謝教學~
回覆刪除