C# での抽象関数と仮想関数

Muhammad Maisam Abbas 2024年2月16日
  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# の仮想関数

仮想関数には独自の定義がありますが、子クラスがそれをオーバーライドして、同じ関数の独自の定義を持つこともできます。virtual キーワードは、関数が C# の仮想関数であることを指定するために使用されます。次のコード例は、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() 関数をオーバーライドしませんでした。main 関数では、Program クラスと parentClass の両方のインスタンスを作成し、両方のインスタンスで name() 関数を呼び出しました。プログラムクラス内に name() 関数の定義がないため、関数呼び出し p.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