C#中使用Override和New關(guān)鍵字進行版本控制
1. 基礎(chǔ)概念
1.1 override
override 關(guān)鍵字用于重寫基類中已經(jīng)聲明為 virtual 或 abstract 的方法、屬性或索引器。使用 override 關(guān)鍵字可以提供基類方法的新實現(xiàn)。它的主要特點包括:
- 多態(tài)性:通過重寫方法,派生類可以實現(xiàn)特定的行為。
- 基類引用:即使是基類引用,調(diào)用重寫的方法也會執(zhí)行派生類的實現(xiàn)。
1.2 new
new 關(guān)鍵字用于隱藏基類中的成員(方法、屬性或事件)。當(dāng)使用 new 關(guān)鍵字時,派生類中的成員將隱藏基類中的同名成員。它的特點包括:
- 不支持多態(tài)性:基類引用仍會調(diào)用基類的方法,而不是派生類的方法。
- 名稱隱藏:派生類中的成員遮蔽了基類中的同名成員,但兩者仍然存在于不同的作用域中。
2. 示例代碼
2.1. override 關(guān)鍵字
override 關(guān)鍵字用于子類中覆蓋(重寫)父類中的方法。這樣做可以讓子類提供特定的實現(xiàn),以滿足其對方法的個性需求。
示例 1:使用 override 覆蓋父類方法
using System;
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Dog barks");
}
}
class Program
{
static void Main(string[] args)
{
Animal myAnimal = new Animal();
Animal myDog = new Dog();
myAnimal.MakeSound(); // 輸出:Animal makes a sound
myDog.MakeSound(); // 輸出:Dog barks
}
}
在這個例子中,Dog 類繼承自 Animal 類,并覆蓋了 MakeSound 方法。當(dāng) myDog.MakeSound() 被調(diào)用時,它將輸出 “Dog barks”,而不是 “Animal makes a sound”。
2.2. new 關(guān)鍵字
new 關(guān)鍵字在C#中有兩個主要用途:
它用于隱藏繼承自基類的成員(方法、屬性、事件等)。
它用于在接口中提供實現(xiàn)。
示例 2:使用 new 隱藏繼承的方法
using System;
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Dog : Animal
{
new public void MakeSound()
{
Console.WriteLine("Dog barks");
}
}
class Program
{
static void Main(string[] args)
{
Animal myAnimal = new Animal();
Animal myDog = new Dog();
myAnimal.MakeSound(); // 輸出:Animal makes a sound
myDog.MakeSound(); // 輸出:Dog barks
}
}
在這個例子中,盡管 Dog 類覆蓋了 MakeSound 方法,但是由于 new 關(guān)鍵字的使用,基類 Animal 的 MakeSound 方法不會被隱藏。
示例 3:使用 new 在接口中提供實現(xiàn)
using System;
interface IMyInterface
{
void MyMethod();
}
class MyClass : IMyInterface
{
public void MyMethod()
{
Console.WriteLine("Interface method implementation");
}
}
class Program
{
static void Main(string[] args)
{
IMyInterface myClass = new MyClass();
myClass.MyMethod(); // 輸出:Interface method implementation
}
}
在這個例子中,MyClass 類實現(xiàn)了 IMyInterface 接口,并使用了 new 來提供 MyMethod 的具體實現(xiàn)。
3.完整示例測試
3.1 基類和派生類的定義
using System;
public class Animal
{
// 一個虛方法,可以在派生類中被重寫
public virtual void Speak()
{
Console.WriteLine("Animal speaks");
}
// 一個普通方法,可以在派生類中被隱藏
public void Sleep()
{
Console.WriteLine("Animal sleeps");
}
}
public class Dog : Animal
{
// 重寫基類的虛方法
public override void Speak()
{
Console.WriteLine("Dog barks");
}
// 使用 new 關(guān)鍵字隱藏基類的同名方法
public new void Sleep()
{
Console.WriteLine("Dog sleeps");
}
}
3.2 測試代碼
接下來,我們可以編寫一個測試程序,來演示 override 和 new 的行為。
class Program
{
static void Main(string[] args)
{
Animal myAnimal = new Animal();
myAnimal.Speak(); // 輸出: Animal speaks
myAnimal.Sleep(); // 輸出: Animal sleeps
Animal myDog = new Dog();
myDog.Speak(); // 輸出: Dog barks (多態(tài)性)
myDog.Sleep(); // 輸出: Animal sleeps (基類方法)
Dog realDog = new Dog();
realDog.Speak(); // 輸出: Dog barks
realDog.Sleep(); // 輸出: Dog sleeps (新定義的方法)
Console.ReadLine();
}
}
3.3 運行結(jié)果
運行上述程序,輸出結(jié)果如下:
Animal speaks
Animal sleeps
Dog barks
Animal sleeps
Dog barks
Dog sleeps
分析
多態(tài)性:在示例中,myDog 是 Animal 類型的引用,但它指向一個 Dog 對象。調(diào)用 Speak 方法時,輸出是 Dog barks,這就是多態(tài)性的體現(xiàn)。myDog.Sleep() 調(diào)用的是基類的 Sleep 方法,輸出 Animal sleeps,因為 Sleep 方法沒有被標(biāo)記為 virtual。
隱藏行為:realDog.Sleep() 調(diào)用的是 Dog 類中定義的新 Sleep 方法,輸出 Dog sleeps。這表明使用 new 關(guān)鍵字隱藏了基類中的同名方法。
結(jié)論
override 和 new 是C#中用于版本控制和多態(tài)的兩個關(guān)鍵字。使用 override,我們可以為子類提供特定的方法實現(xiàn),而 new 則用于在繼承體系中隱藏基類的成員或為接口提供實現(xiàn)。這兩個關(guān)鍵字極大地增強了C#語言的靈活性和表達力。
以上就是C#中使用Override和New關(guān)鍵字進行版本控制的詳細內(nèi)容,更多關(guān)于C# Override和New版本控制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
程序中兩個Double類型相加出現(xiàn)誤差的解決辦法
本篇文章介紹了,程序中兩個Double類型相加出現(xiàn)誤差的解決辦法。需要的朋友參考下2013-04-04
C#優(yōu)雅的實現(xiàn)INotifyPropertyChanged接口
這篇文章介紹了C#實現(xiàn)INotifyPropertyChanged接口的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
C#實現(xiàn)Modbus通信的詳細教程(支持TCP和RTU)
Modbus 協(xié)議是一種廣泛應(yīng)用于工業(yè)自動化中的通信協(xié)議,用于在設(shè)備之間進行數(shù)據(jù)交換,它基于主/從架構(gòu),并支持多種傳輸方式,如 Modbus TCP 和 Modbus RTU,在本文中,我們將使用 C# 編程語言和開源庫 NModbus,展示如何輕松實現(xiàn) Modbus 通信,需要的朋友可以參考下2025-01-01

