C# でのオーバーライド
C# におけるオーバーライドとは、派生クラスでの基本クラスのメソッドの再実装です。この場合、基本クラスのメソッドが子クラスでオーバーライドされます。派生クラス メソッドは、基本クラス メソッドと同じ名前とシグネチャを持ちます。オーバーライドは、実行時ポリモーフィズムを実現するのに役立ちます。
メソッドのオーバーライドで使用されるキーワードがいくつかあります。
1.仮想 – このキーワードは、基本クラスのメソッドをオーバーライドできることを示す基本クラスで使用されます。
public virtual void Method() { // implementation }
2.オーバーライド – このキーワードは派生クラスで使用され、派生クラスが基本クラスのメソッドをオーバーライドすることを示します。
public override void Method() { // implementation }
3. Base – このキーワードは、派生クラスで基本クラスのメソッドを呼び出すために使用されます。
public override void Method() { base.Method(); // implementation }
C# でオーバーライドはどのように機能しますか?
以下は、C# でオーバーライドを実装する方法の例です。
class Parent { public virtual void Demo() // base class { Console.WriteLine(“This is parent”); } } class Child: Parent { public override void Demo() // derived class { Console.WriteLine(“This is child”); } }
上記の例には 2 つのクラスがあり、1 つは基本クラスまたは親クラス、もう 1 つは派生クラス、つまり子クラスです。基本クラスのメソッドは子クラスで派生されます。この場合、親のメソッドは仮想であり、子クラスによってオーバーライドできることを意味します。子でのオーバーライドは、このメソッドが同じメソッド シグネチャを持つ親クラスのメソッドと同じであることを意味します。
C# におけるオーバーライドの種類
以下は、さまざまなキーワードによるオーバーライドを示す例です。
例 1 – Virtual および Override キーワードなし
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { class Bird // base class { public void fly() // base class method { Console.WriteLine("Birds are flying"); } } class Peacock : Bird // derived class { public new void fly() // derived class method { Console.WriteLine("Peacock is flying"); } } class Program { // main method static void Main(string[] args) { Bird b = new Peacock(); b.fly(); Console.ReadLine(); } } }
上記の例では、ベースメソッドと派生メソッドの両方でキーワードが使用されていません。
main メソッドでも、親参照を使用して子メソッドを呼び出します。したがって、この場合、キーワードが使用されていない場合、子メソッドの代わりに親メソッドが呼び出されます。したがって、出力は
となります。出力:
例 2 (a) - Virtual キーワードと Override キーワードを使用する
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { class Bird // base class { public virtual void fly() // base class method { Console.WriteLine("Birds are flying"); } } class Peacock : Bird // derived class { public override void fly() // derived class method { Console.WriteLine("Peacock is flying"); } } class Program { // main method static void Main(string[] args) { Bird b = new Peacock(); b.fly(); Console.ReadLine(); } } }
この例では、基本クラスで virtual が使用されています。これは、独自の方法でメソッドを実装する権限を子クラスに与えることを意味します。派生クラスでは、オーバーライドが使用されます。これは、子メソッドがオーバーライド メソッドであることを意味します。どちらのメソッドも同じ名前で同じメソッド シグネチャを持ちますが、実装部分が異なります。この例でも、親参照を使用して子メソッドを呼び出します。ただし、親メソッドは仮想メソッドであるため、親メソッドではなく子メソッドが最初に呼び出されます。したがって、出力は
となります。出力:
例 2 (b) – 仮想キーワードとオーバーライド キーワード
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { class Bird // base class { public virtual void fly() // base class method { Console.WriteLine("Birds are flying"); } } class Peacock : Bird // derived class { public override void fly() // derived class method { Console.WriteLine("Peacock is flying"); } } class Program { //main method static void Main(string[] args) { Peacock p = new Peacock(); p.fly(); Console.ReadLine(); } } }
この例は前の例と同じですが、この子メソッドが参考として使用されます。
出力:
例 3 – 基本キーワードを使用する
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { class Bird // base class { public virtual void fly() // base class method { Console.WriteLine("Birds are flying"); } } class Peacock : Bird // derived class { public override void fly() // derived class method { base.fly(); // base is use to call parent method Console.WriteLine("Peacock is flying"); } } class Program { static void Main(string[] args) { Peacock p = new Peacock(); p.fly(); Console.ReadLine(); } } }
上記の例では、派生クラスで基底クラスのメソッドを呼び出すために基底が使用されています。したがって、この基本メソッドでは最初に呼び出され、次に派生メソッドが呼び出されます。
出力:
例 4 – オーバーライドを伴う抽象クラス
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { abstract class Calculate { public abstract int sum(); } class Values : Calculate // derived class { int val1; int val2; public Values(int a = 0, int b = 0) { val1 = a; val2 = b; } public override int sum() { Console.WriteLine("sum of two values"); return (val1 + val2); } } class Program { static void Main(string[] args) { Values v = new Values(10, 20); int a = v.sum(); Console.WriteLine(a); Console.ReadLine(); } } }
上記の例では、抽象メソッドが使用されています。抽象クラスは、抽象メソッドを含む派生クラスによって実装されます。
出力:
メソッドオーバーライドのルール
- 派生クラスのメソッド シグネチャは、基本クラスと同じである必要があります。
- 同じクラス内でオーバーライドすることはできません。
- アクセス修飾子は、仮想メソッドとオーバーライド メソッドで同じである必要があります。
- virtual キーワードは基本クラスのメソッドで使用され、Override は派生クラスのメソッドで使用されます。
- 基本クラスのメソッドは静的であってはなりません。
結論
オーバーライドは実行時のポリモーフィズムに役立ちます。これにより、派生クラスが独自の方法で基本クラスのメソッドを実装できるようになります。したがって、メソッドの実装は、派生クラスとその基本クラスとは異なります。オーバーライドされるメソッドは、仮想、オーバーライド、または抽象のいずれかになります。
以上がC# でのオーバーライドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

XML形式を変更する方法はいくつかあります。Atepadなどのテキストエディターを使用して手動で編集する。 XmlBeautifierなどのオンラインまたはデスクトップXMLフォーマットツールを使用して自動的にフォーマットします。 XSLTなどのXML変換ツールを使用して変換ルールを定義します。または、Pythonなどのプログラミング言語を使用して解析および操作します。元のファイルを変更してバックアップするときは注意してください。
