C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解
過載(過載)overload、重寫(覆蓋)override、覆寫overwrite(new)詳解
一、override重寫,是在子類中重寫父類中的方法,兩個函式的函式特徵(函式名、引數型別與個數)相同。用於擴充套件或修改繼承的方法、屬性、索引器或事件的抽象或虛擬實現。提供從基類繼承的成員的新實現,而通過override宣告重寫的方法稱為基方法。
注意事項:
1.重寫基方法必須具有與override方法相同的簽名。
2.override宣告不能更改virtual方法的可訪問性,且override方法與virtual方法必須具有相同級別訪問修飾符。
3.不能用new、static、virtual修飾符修改override方法。
4.重寫屬性宣告必須指定與繼承的屬性完全相同的訪問修飾符、型別和名稱。
5.重寫的屬性必須是virtual、abstract或override。
6.不能重寫非虛方法或靜態方法。
7.父類中有abstract,那麼子類同名方法必定有override,若父類中有 virtual方法,子類同名方法不一定是override,可能是overload。
8.override必定有父子類關係。
二、overload過載,在同一個類中方法名相同、引數或返回值不同的多個方法即為方法過載。
注意事項:
1.出現在同一個類中。
2.引數列表不同或返回型別和引數列表都不同,只有返回型別不同不能過載。(引數列表包括引數個數和引數型別)
三、overwrite覆寫,用new實現。在子類中用 new 關鍵字修飾定義的與父類中同名的方法,也稱為覆蓋,覆蓋不會改變父類方法的功能。
另一種解釋new是指“隱藏”,是指子類隱藏了父類的方法,當然,通過一定的轉換,可以在子類的物件中訪問父類的方法。
示例:
class Parent
{
public void F()
{
Console.WriteLine("Parent.F()");
}
public virtual void G() //抽象方法
{
Console.WriteLine("Parent.G()");
}
public int Add(int x, int y)
{
return x + y;
}
public float Add(float x, float y) //過載(overload)Add函式
{
return x + y;
}
}
class ChildOne:Parent //子類一繼承父類
{
new public void F() //重寫(overwrite)父類函式
{
Console.WriteLine("ChildOne.F()");
}
public override void G() //覆寫(override)父類虛擬函式,主要實現多型
{
Console.WriteLine("ChildOne.G()");
}
}
class ChildTwo:Parent //子類二繼承父類
{
new public void F()
{
Console.WriteLine("ChildTwo.F()");
}
public override void G()
{
Console.WriteLine("ChildTwo.G()");
}
}
class Program
{
static void Main(string[] args)
{
Parent childOne = new ChildOne();
Parent childTwo = new ChildTwo();
//呼叫Parent.F()
childOne.F();
childTwo.F();
//實現多型
childOne.G();
childTwo.G();
Parent load = new Parent();
//過載(overload)
Console.WriteLine(load.Add(1, 2));
Console.WriteLine(load.Add(3.4f, 4.5f));
Console.Read();
}
}
---------------------
作者:入秋楓葉
來源:CSDN
原文:https://blog.csdn.net/yiyelanxin/article/details/71711383
版權宣告:本文為博主原創文章,轉載請附上博文連結!
相關文章
- override(重寫) and overload(過載)IDE
- Java 重寫(Override)與過載(Overload)JavaIDE
- Java-override重寫與overload過載JavaIDE
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 二十二、SpringCloud分散式微服務雲架構之Java 重寫(Override)與過載(Overload)SpringGCCloud分散式微服務架構JavaIDE
- 【c#】重寫和過載C#
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- override與過載(overload)的區別IDE
- 方法重寫(Override)IDE
- 使用 Override 和 New 關鍵字進行版本控制(C# 程式設計指南)IDEC#程式設計
- JAVA過載(overload)和覆蓋(override)中你所不知道的陷阱JavaIDE
- c# yield關鍵字原理詳解C#
- 子類重寫父類的方法@Override的快捷鍵IDE
- c#之多型性_繼承_重寫_虛擬函式_new覆蓋整合測試C#多型繼承函式
- 【JAVA】重寫和過載Java
- 重寫、覆蓋、過載、多型幾個概念的區別分析多型
- js中new關鍵字的使用過程JS
- c# abstract抽象類_非抽象類_virtual_虛方法_override重寫C#抽象IDE
- 關於繼承、重寫、過載的易混淆之處的總結繼承
- 過載和重寫的區別
- Java中的過載和重寫Java
- C# [method Modifiers] abstract virtual override newC#IDE
- c#之重寫與過載的區別與聯絡_摘自.NEt專家部落格!C#
- 重寫返回鍵(Fragment)Fragment
- Javascript中this關鍵字詳解JavaScript
- Java—重寫與過載的區別Java
- Java中方法重寫與方法過載Java
- override 與overload 的區別IDE
- override與overload的區別IDE
- c#關鍵字C#
- javascript new關鍵字做了什麼JavaScript
- 萬字乾貨|Synchronized關鍵字詳解synchronized
- java中過載與重寫的區別Java
- Python關鍵字yield詳解Python
- Python 關鍵字 yield 詳解Python
- Nginx URL重寫規則配置詳解Nginx
- Overload 和 和 Override 的區別IDE
- override 與 overload 的區別+例子IDE