欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中使用Override和New關(guān)鍵字進行版本控制

 更新時間:2024年10月11日 10:08:36   作者:白話Learning  
在?C#?中,override?和?new?關(guān)鍵字用于控制類之間的成員方法的隱藏和重寫,理解它們之間的差異和使用場景對于設(shè)計靈活且易于維護的代碼至關(guān)重要,在這篇博客中,我們將詳細探討這兩個關(guān)鍵字的用法,并通過示例來說明它們的實際應(yīng)用,需要的朋友可以參考下

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)鍵字用于隱藏基類中的成員(方法、屬性或事件)。當使用 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 方法。當 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 方法沒有被標記為 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)文章

最新評論