重載可以定義為定義和實現多態性技術的過程,它允許程式中的變數或物件在程式碼執行期間呈現各種其他形式。當方法屬性與參數類型不相似、執行順序不同、存在多個具有相同名稱和不同屬性的方法等時,可以使用此技術。這可以在一個程式中的不同方法中實現,例如不同數量的參數、不同類型的參數、不同的參數順序、可選參數和命名參數。
C# 中有多個運算符。
這些是一些我們可以重載的預定義運算子。
文法:
以下是實作運算子重載的語法:
public static classname operator op (parameters) { // Code }
對於一元運算子
public static classname operator op (t) { // Code }
對於二元運算子
public static classname operator op (t1, t2) { // Code }
Operator 是用來實作運算子重載的關鍵字。運算子重載的回傳類型永遠不能為 void。在運算子重載中,始終優先考慮使用者定義的實作而不是預先定義的實作。在重載中,重載的方法應該有不同類型的參數,不同的參數數量以及參數的順序應該不同。因此運算子重載方法與任何其他方法相同。在使用者定義的實作中,語法和優先權無法修改。在二元運算子中,.operator 的左邊是成員,右邊的物件稱為參數。
以下範例展示如何在 C# 中實作運算子重載概念:
使用一元運算子重載運算子。 在此範例中,一元運算子用於重載。 – 運算子用於呼叫重載方法的名為Example 的類別中。 如同下面的程式碼中所提到的,編譯器將其視為operator-(obj);.
代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OperatorOverloading { class Example { public int val1, val2; public Example(int no1, int no2) { val1 = no1; val2 = no2; } public Example() { } public static Example operator -(Example eg1) { eg1.val1 = -eg1.val1; eg1.val1 = -eg1.val1; return eg1; } public void Print() { Console.WriteLine("value1 =" + val1); Console.WriteLine("value2 =" + val2); Console.Read(); } class Program { static void Main(string[] args) { Example eg = new Example(30, -60); eg.Print(); Example eg1 = new Example(); eg1 = -eg; eg1.Print(); Console.Read(); } } } }
輸出:
使用二元運算子重載運算子。 在這個範例中,二元運算子用來展示如何實作運算子重載。 + 運算子用於新增物件。操作員接收一個參數。在程式碼中,num 是名為Example 的類別的對象,該物件將傳遞到該類別。在重載中,運算子的左邊是成員,右邊的物件稱為參數。
代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OperatorOverloading { class Example { public int num; public Example() { num = 0; } public Example(int n) { num = n; } public static Example operator +(Example e1, Example e2) { Example e3 = new Example(); e3.num = e1.num + e2.num; return e3; } public void display() { Console.WriteLine("{0}", num); } } class Program { static void Main(string[] args) { Example num = new Example(200); Example num1 = new Example(300); Example num2 = new Example(); num2 = num + num1; num.display(); num1.display(); num2.display(); Console.Read(); } } }
輸出:
運算子重載和繼承。
代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OperatorOverloading { class Example { public int num; public Example() { num = 0; } public Example(int n) { num = n; } public static Example operator +(Example e1, Example e2) { Example e3 = new Example(); e3.num = e1.num + e2.num; return e3; } public void display() { Console.WriteLine("{0}", num); } } class Example1 : Example { private double a; private double b; public Example1(double x, double y) { a = x; b = y; } public Example1() { } public void Show() { Console.WriteLine("{0} {1}", a, b); } } class Program { static void Main(string[] args) { Example1 num = new Example1(20.0,2.3); num.Show(); Example1 num1 = new Example1(3.0,3.1); num1.Show(); Example1 num2 = new Example1(); //num2 = num + num1; //num2.Show(); Console.Read(); } } }
輸出:
重載運算子也可以繼承到衍生類別。因為不可能在衍生類別中聲明運算子來隱藏基底類別聲明的運算子。
使用相等運算子重載運算子。在此範例中,使用相等運算子顯示了運算子重載。相等運算子用於我們想要進行比較的地方。我們可以重載類別中的方法來進行比較。在此程式碼中,物件 e1 和 e2 的值相同。但他們的參考文獻不同。物件值的比較是基於引用的。對於 e2 和 e3,它指的是同一個物件。
代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OperatorOverloading { class Example { private int a; private int b; public Example() { } public Example(int x, int y) { a = x; b = y; } public void Display() { Console.WriteLine("{0} {1}", a, b); } } class Program { public static void Main() { Example e1 = new Example(30, 20); e1.Display(); Example e2 = new Example(30, 20); e2.Display(); Example e3 = e2; e3.Display(); if (e1.Equals(e2)) Console.WriteLine("equal"); else Console.WriteLine("not equal"); if (e2.Equals(e3)) Console.WriteLine("equal"); Console.ReadLine(); } } }
輸出:
運算子重載是一個重要的概念。它提供了操作符在多個操作中的可重複使用性。在 C# 中,我們只能重載一組已定義的參數。並非所有 .Net 語言都支援運算子重載。因此在 C# 中,它在使用者定義的實作方面提供了額外的功能。
以上是C# 中的運算子重載的詳細內容。更多資訊請關注PHP中文網其他相關文章!