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()
は出力これは親クラスです
を提供しました。
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