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