ホームページ  >  記事  >  バックエンド開発  >  C# の仮想キーワード 

C# の仮想キーワード 

WBOY
WBOYオリジナル
2024-09-03 15:26:38800ブラウズ

仮想キーワードとは何ですか? 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# で仮想はどのように機能しますか?

オーバーロードとオーバーライドの基本的な違いは、前者はコンパイル時のメカニズムであるのに対し、後者は実行時に機能することです。仮想キーワードは実行時に動作し、メソッド オーバーライドの概念を実装します。

仮想メソッドまたはプロパティが呼び出されるかアクセスされると、コンパイラはメソッドまたはプロパティのオーバーライド メンバーを確認します。見つかった場合は、それが呼び出されます。何も見つからない場合は、元のメソッドまたはプロパティが呼び出されます。

ここで素晴らしい疑問が生じます – マルチレベル継承の場合はどうなるのでしょうか?そうですね、いずれかのクラス メンバーが複数のレベルでオーバーライドされた場合、最も深いオーバーライドされたメンバー (最も派生したクラスのメンバー) が呼び出されます。

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());
}
}

出力:

C# の仮想キーワード 

上記のコードはどのように機能しますか?

基本クラス 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# の仮想の概念を理解しました。 C# が実行時に virtual キーワードをどのように実装するかを確認し、例を確認しました。

仮想メンバーは、オブジェクト指向プログラミングの優れた概念です。ただし、より深い知識を得るには、抽象キーワード、インターフェイス、新しいキーワードについて学ぶことを強くお勧めします。これは、それらすべての違いを理解するのに非常に役立ちます。これは、仮想をいつ使用するか、いつ使用しないかを判断するのに役立ちます。

以上がC# の仮想キーワード の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。