C#のオーバーライドのサンプルです。
目次
オーバーライド
- クラスを継承するときに使用します。
- 基底クラスで定義したメソッドを、派生クラスで同じメソッド名(引数、戻り値の型も一致)を記述して処理内容を上書きすることです。
- 基底クラスのメソッドにvirtualキーワードをつけます。
- 派生クラスのメソッドにoverrideキーワードをつけます。
- 似た名前として、オーバーロードがありますがそれとは別です。オーバーロードと継承は関係ありません。
C# オーバーロードのサンプル
オーバーライドのサンプル
オーバーライドのサンプルです。
3-9行目は基本クラスで11-17行目は派生クラスです。
5行目と13行目は同じメソッド名です。
5行目は、virtualというキーワードが入っています。
13行目は、overrideというキーワードが入っています。
27行目の変数「c1」は、基本クラスの型の変数ですが、オーバーライドで派生クラス「Class2」のprint1メソッドが実行されます。
using System;
// 基本クラス
class Class1
{
public virtual string print1()
{
return "表示1";
}
}
// 派生クラス
class Class2 : Class1
{
public override string print1()
{
return "表示2";
}
}
class Test1
{
static void Main()
{
Class2 c2 = new Class2();
Console.WriteLine(c2.print1()); // 表示2
Class1 c1 = c2;
Console.WriteLine(c1.print1()); // 表示2
}
}
オーバーライドではないサンプル
上記のコードからvirtualとoverrideを指定しない場合のサンプルです。
3-9行目は基本クラスで11-17行目は派生クラスです。
27行目の変数「c1」は、基本クラスの型の変数です。基本クラス「Class1」のprint1メソッドが実行されます。
using System;
// 基本クラス
class Class1
{
public string print1()
{
return "表示1";
}
}
// 派生クラス
class Class2 : Class1
{
public string print1()
{
return "表示2";
}
}
class Test1
{
static void Main()
{
Class2 c2 = new Class2();
Console.WriteLine(c2.print1()); // 表示2
Class1 c1 = c2;
Console.WriteLine(c1.print1()); // 表示1
}
}
virtual
- 派生クラスでオーバーライドできるようにします。
- 以下は、MicrosoftのC#のvirtualのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/virtual
override
- オーバーライドします。
- 以下は、MicrosoftのC#のoverrideのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/override
関連の記事
C# クラスのサンプル
C# コンストラクタのサンプル
C# クラスの継承のサンプル
C# オーバーロードのサンプル
C# パーシャルクラスのサンプル