首頁  >  文章  >  後端開發  >  C# 中的運算子重載

C# 中的運算子重載

王林
王林原創
2024-09-03 15:13:441080瀏覽

重載可以定義為定義和實現多態性技術的過程,它允許程式中的變數或物件在程式碼執行期間呈現各種其他形式。當方法屬性與參數類型不相似、執行順序不同、存在多個具有相同名稱和不同屬性的方法等時,可以使用此技術。這可以在一個程式中的不同方法中實現,例如不同數量的參數、不同類型的參數、不同的參數順序、可選參數和命名參數。

C# 中的各種運算子重載

C# 中有多個運算符。

  1. 我們可以重載所有二元運算符,即 +、-、*、/、%、&、|、>。
  2. 我們可以重載所有一元運算符,即 ++、–、true、false、+、-、~。
  3. 有些運算子如 &&、||、[] 、() 不能重載。
  4. 我們可以成對重載關係運算子。它們是 ==、=、、= 等
  5. 我們可以重載複合運算符,因為它們已經相對於二元運算子重載了。

這些是一些我們可以重載的預定義運算子。

文法:

以下是實作運算子重載的語法:

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# 中運算子重載的範例

以下範例展示如何在 C# 中實作運算子重載概念:

範例#1

使用一元運算子重載運算子。 在此範例中,一元運算子用於重載。 – 運算子用於呼叫重載方法的名為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();
}
}
}
}

輸出:

C# 中的運算子重載

範例#2

使用二元運算子重載運算子。 在這個範例中,二元運算子用來展示如何實作運算子重載。 + 運算子用於新增物件。操作員接收一個參數。在程式碼中,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();
}
}
}

輸出:

C# 中的運算子重載

範例#3

運算子重載和繼承。

代碼:

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();
}
}
}

輸出:

C# 中的運算子重載

重載運算子也可以繼承到衍生類別。因為不可能在衍生類別中聲明運算子來隱藏基底類別聲明的運算子。

範例#4

使用相等運算子重載運算子。在此範例中,使用相等運算子顯示了運算子重載。相等運算子用於我們想要進行比較的地方。我們可以重載類別中的方法來進行比較。在此程式碼中,物件 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# 中的運算子重載

結論

運算子重載是一個重要的概念。它提供了操作符在多個操作中的可重複使用性。在 C# 中,我們只能重載一組已定義的參數。並非所有 .Net 語言都支援運算子重載。因此在 C# 中,它在使用者定義的實作方面提供了額外的功能。

以上是C# 中的運算子重載的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn