ホームページ >バックエンド開発 >C#.Net チュートリアル >C# の仮想キーワード
仮想キーワードとは何ですか? C# の観点に移る前に、オブジェクト指向プログラミングの世界における継承、オーバーライド、仮想キーワードの概念を理解または修正することが重要です。
メソッドのオーバーライドは、継承と密接に結びついた OOP の概念です。子クラスのメソッドが、同じ名前、パラメータ、戻り値の型の親クラスのメソッドをオーバーライドすることを、メソッドのオーバーライドと呼びます。 virtual キーワードは、メソッドが派生クラスでオーバーライドされる可能性があることをコンパイラーに示します。
C# の観点に戻ると、virtual キーワードは、派生クラスでオーバーライドできるようにプロパティ、メソッド、またはイベントの宣言を変更するために使用されます。簡単に言うと、virtual キーワードは C# のメソッド オーバーライドの概念を実装します。
構文
基本クラスに virtual キーワードを追加し、派生クラスに override キーワードを追加することで、プロパティ、メソッド、イベントをオーバーライドできます。
基本クラス宣言に virtual キーワードを追加します。
public class Base { public virtual int abc { get; set; } // this property can be overridden public virtual void Xyz() { } // this method can be overridden }
基本クラス宣言に override キーワードを追加します。
public class Derived : Base { public override int abc { get; set; } // this overrides the base class property public override void Xyz() { } // this overrides the base class method }
オーバーロードとオーバーライドの基本的な違いは、前者はコンパイル時のメカニズムであるのに対し、後者は実行時に機能することです。仮想キーワードは実行時に動作し、メソッド オーバーライドの概念を実装します。
仮想メソッドまたはプロパティが呼び出されるかアクセスされると、コンパイラはメソッドまたはプロパティのオーバーライド メンバーを確認します。見つかった場合は、それが呼び出されます。何も見つからない場合は、元のメソッドまたはプロパティが呼び出されます。
ここで素晴らしい疑問が生じます – マルチレベル継承の場合はどうなるのでしょうか?そうですね、いずれかのクラス メンバーが複数のレベルでオーバーライドされた場合、最も深いオーバーライドされたメンバー (最も派生したクラスのメンバー) が呼び出されます。
C# の仮想キーワードの例を以下に示します
単一の子クラスが親クラスを継承する場合、つまり複数レベルの継承がない場合の仮想キーワードの動作を理解するための例を見てみましょう。
コード:
using System; public class Polynomial { public virtual double len { get; set; } public virtual double wid { get; set; } public virtual double Area() { return len * wid; } } public class Rectangle: Polynomial { } public class Square : Polynomial { public override double len { get; set; } public override double Area() { return len * len; } } public class Circle : Polynomial { public double radius { get; set; } public override double Area() { return Math.PI * radius * radius; } } public class Triangle : Polynomial { public override double Area() { return 0.5 * len * wid; } } public class Program { public static void Main() { var rect = new Rectangle(); rect.len = 5; rect.wid = 10; Console.WriteLine("Area of Rectangle = " + rect.Area()); var sq = new Square(); sq.len = 15; Console.WriteLine("Area of Square = " + sq.Area()); var cir = new Circle(); cir.radius = 10; Console.WriteLine("Area of Circle = " + cir.Area()); var tri = new Triangle(); tri.len = 5; tri.wid = 10; Console.WriteLine("Area of Triangle = " + tri.Area()); } }
出力:
基本クラス Polynomial で、2 つのプロパティと 1 つのメソッドを仮想として宣言しました。これらは子クラスでオーバーライドできるようになりました。次に、Polynomial クラスを継承して、さまざまな形のさまざまな子クラスを作成します。
Rectangle クラスでは、プロパティやメソッドをオーバーライドする必要はありません。基本クラスの実装は、Rectangle クラスに対してそのまま機能します。
Square クラスには width プロパティがありません。そこで、length プロパティと Area メソッドをオーバーライドして、長さの 2 乗を返します。
Circle クラスでは、長さも幅もありません。そこで、新しいクラス固有のプロパティである radius を宣言し、それに応じて Area メソッドをオーバーライドします。
Triangle クラスでは、Area メソッドをオーバーライドするだけで、プロパティは基本クラス Polynomial から継承されます。
派生クラスのオブジェクトを作成するとき、コンパイラは基本クラスの構築中に virtual キーワードに遭遇し、オーバーライドされたメンバーを探します。オーバーライドされたメンバーは、それに応じて呼び出されます。
上記の例を変更して、マルチレベルの継承を含めてみましょう。
コード:
using System; public class Polynomial { public virtual double len { get; set; } public virtual double wid { get; set; } public virtual double Area() { return 0; } } public class Rectangle : Polynomial { public override double Area() { return len * wid; } } public class Square : Rectangle { public override double len { get; set; } public override double Area() { return len * len; } } public class Program { public static void Main() { var rect = new Rectangle(); rect.len = 5; rect.wid = 10; Console.WriteLine("Area of Rectangle = " + rect.Area()); var sq = new Square(); sq.len = 15; Console.WriteLine("Area of Square = " + sq.Area()); } }
出力:
仮想メンバーには、基本クラスと派生クラスの両方に宣言と定義があります。仮想メンバーは、派生クラスで追加の機能が必要な場合に有利です。これらはアドオンとして機能します。
この記事では、C# の仮想の概念を理解しました。 C# が実行時に virtual キーワードをどのように実装するかを確認し、例を確認しました。
仮想メンバーは、オブジェクト指向プログラミングの優れた概念です。ただし、より深い知識を得るには、抽象キーワード、インターフェイス、新しいキーワードについて学ぶことを強くお勧めします。これは、それらすべての違いを理解するのに非常に役立ちます。これは、仮想をいつ使用するか、いつ使用しないかを判断するのに役立ちます。
以上がC# の仮想キーワード の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。