C# 中的重載與重寫

WBOY
發布: 2024-09-03 15:13:14
原創
817 人瀏覽過

多態是C#中的重要概念之一。多態性有兩種類型,編譯時和執行時。重載和覆蓋概念分別用於實現此目的。在重寫中,子類別可以以不同的方式實作父類別方法,但子類別方法與父類別具有相同的名稱和相同的方法簽名,而在重載中,一個類別中有多個具有相同名稱和不同參數的方法。

C# 中的重寫和重載如何運作?

C# 中覆蓋和重載的工作原理透過範例進行解釋:

壓倒一切

我們在重寫時會使用一些關鍵字,例如 virtual、override 和 base。

文法:

class Parent
{
public virtual void Example() // base class
{
Console.WriteLine("parent class");
}
}
class Child: Parent
{
public override void Example() // derived class
{
base.Example();
Console.WriteLine("Child class");
}
}
登入後複製

這裡使用了virtual和override關鍵字,這意味著基類是virtual的,子類可以實現這個類,override意味著這個子類與父類具有相同的名稱和相同的方法簽名。

範例#1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverridingExample
{
class Subject           // base class
{
public virtual void study()              // base class method
{
Console.WriteLine("Study all the subjects");
}
}
class Mathematics: Subject      //  derived class
{
public override void study()        // derived class method
{
Console.WriteLine("Study Mathematics");
}
}
class Program
{
// main method
static void Main(string[] args)
{
Subject s = new Mathematics();
s.study();
Console.ReadLine();
}
}
}
登入後複製

在上面的範例中,方法名稱相同,但實作不同。基底類別具有虛擬函數,因此子類別可以以自己的方式實作父類別方法。子類別方法有關鍵字 override ,表示該方法是重寫方法。

輸出:

C# 中的重載與重寫

範例#2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverridingExample
{
class Subject             // base class
{
public virtual void study()              // base class method
{
Console.WriteLine("Study all the subjects");
}
}
class Mathematics: Subject      //  derived class
{
public override void study()        // derived class method
{
base.study();
Console.WriteLine("Study Mathematics");
}
}
class Program
{
// main method
static void Main(string[] args)
{
Mathematics m = new Mathematics();
m.study();
Console.ReadLine();
}
}
}
登入後複製

輸出:

C# 中的重載與重寫

在此範例中,衍生類別有一個基底關鍵字,用於呼叫基底類別方法。因此,在這種情況下,派生方法會在基底類別方法之後被呼叫。

要記住的重點:

  • 在重寫概念中,方法的名稱以及方法簽章和存取修飾符始終與父類別和子類別相同。
  • 父類別方法不能是靜態的。

超載

在重載中,存在多個具有不同方法簽名的方法。以下是一些範例,展示如何透過改變參數數量、參數順序和參數資料類型來實現重載。

範例#1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverloadingExample
{
class Demo
{
public int Sum(int x, int y)
{
int value = x + y;
return value;
}
public int Sum(int x, int y, int z)
{
int value = x + y + z;
return value;
}
public static void Main(string[] args) // main method
{
Demo d = new Demo();
int sum1 = d.Sum(24, 28);
Console.WriteLine("sum of the two "
+ "integer value : " + sum1);
int sum2 = d.Sum(10, 20, 30);
Console.WriteLine("sum of the three "
+ "integer value : " + sum2);
Console.ReadLine();
}
}
}
登入後複製

在上面的範例中,有兩個名稱相同但參數數量不同的方法。  第一個方法包含兩個參數,而第二個方法包含三個參數。這稱為方法重載。

輸出:

C# 中的重載與重寫

範例#2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverloadingExample
{
class Demo
{
public int Sum(int x, int y, int z)
{
int value = x + y + z;
return value;
}
public double Sum(double x, double y, double z)
{
double value = x + y + z;
return value;
}
public static void Main(string[] args) // main method
{
Demo d = new Demo();
int sum1 = d.Sum(24, 28,7);
Console.WriteLine("sum of the two "
+ "integer value : " + sum1);
double sum2 = d.Sum(10.0, 20.0, 30.0);
Console.WriteLine("sum of the three "
+ "integer value : " + sum2);
Console.ReadLine();
}
}
}
登入後複製

在上面的範例中,有兩個方法名稱相同,但資料型別不同。第一個方法具有整數資料類型,而第二個方法具有雙精確度資料類型。因此,在這種情況下,參數會因資料類型的不同而變化。

輸出:

C# 中的重載與重寫

範例#3
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverloadingExample
{
class Demo
{
public void Details(String name,int id)
{
Console.WriteLine("Name " + name + ", "
+ "Id " + id); ;
}
public void Details(int id,string name)
{
Console.WriteLine("Name " + name + ", "
+ "Id " + id);
}
public static void Main(string[] args) // main method
{
Demo d = new Demo();
d.Details("John", 10);
d.Details("Joe", 20);
Console.ReadLine();
}
}
}
登入後複製

在上面的範例中,方法名稱相同,但參數順序不同。第一個方法有名稱和 ID。而第二個分別有 id 和 name。

輸出:

C# 中的重載與重寫

要記住的重點:

  • 在重載概念中,在順序、類型和數量的情況下,不可能定義多個具有相同參數的方法。
  • 無法根據不同的回傳類型重載方法。

C# 中重載與重寫的優點

以下是優點說明。

  • 重載是實現靜態的方式之一,重寫是C#實現動態多型的方式之一。
  • 它為使用者提供了靈活性以及程式碼的簡潔性。

結論

重載和重寫在實現多態性方面發揮著重要作用。重寫允許派生類別以自己的方式實現,另一方面重載是關於具有相同名稱的方法和各種類型的參數實現。

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

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!