C# 中的抽象函式與虛擬函式

Muhammad Maisam Abbas 2023年1月30日 2021年4月29日
  1. C# 中的抽象函式
  2. C# 中的虛擬函式
C# 中的抽象函式與虛擬函式

本教程將比較 C# 中的抽象函式和虛擬函式。

C# 中的抽象函式

在 C# 中,抽象函式沒有自己的定義。這意味著每個子類都必須重寫抽象函式並提供其自己的抽象函式定義。抽象函式只能在抽象類內部宣告。abstract 關鍵字用於在 C# 中建立抽象類和函式。以下程式碼示例向我們展示瞭如何使用 C# 中的 abstract 關鍵字建立抽象函式。

using System;

namespace abstract_vs_virtual
{
    public abstract class parentClass
    {
        public abstract void name();
    }
    class Program : parentClass
    {
        public override void name()
        {
            Console.WriteLine("This is Child Class");
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.name();
        }
    }
}

輸出:

This is Child Class

我們建立了一個抽象類 parentClass,並在 parentClass 類中宣告瞭一個抽象函式 name。我們從 parentClass 繼承了 Program 類,並覆蓋了 name() 函式。在 main 函式中,我們初始化 Program 類的例項並呼叫 name() 函式。

C# 中的虛擬函式

虛擬函式有其自己的定義,但它也允許子類覆蓋它並具有相同函式的自己的定義。在 C# 中,virtual 關鍵字用於指定一個函式是一個虛擬函式。以下程式碼示例向我們展示瞭如何在 C# 中建立虛擬函式。

using System;

namespace abstract_vs_virtual
{
    public class parentClass
    {
        public virtual void name()
        {
            Console.WriteLine("This is the Parent Class");
        }
    }
    class Program : parentClass
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            p.name();
            parentClass pc = new parentClass();
            pc.name();
        }
    }
}

輸出:

This is the Parent Class
This is the Parent Class

在上面的程式碼中,我們建立了一個 parentClass 類,並在 parentClass 類中定義了一個虛擬函式 name()。然後,我們從 parentClass 繼承了 Program 類,並且沒有覆蓋 Program 類中的 name() 函式。在主函式中,我們建立了 Program 類和 parentClass 的例項,並用這兩個例項呼叫了 name() 函式。函式呼叫 p.name() 給我們輸出 This 是 Parent Class,因為在 Program 類中沒有 name() 函式的定義。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相關文章 - Csharp Function