C#のクラスの継承の仕組みとサンプルです。
目次
仕組み | クラスの継承とは |
サンプル | 継承の書き方 |
親クラスのコンストラクタを実行する(base) | |
親クラスのメソッドを実行する(base) | |
クラスの継承を禁止する(sealed) |
クラスの継承とは
クラスを継承すると、継承先のクラスは継承元のクラスの機能を引き継ぎます。
継承先のクラスは、差分の機能を追加するだけでよくなります。
継承元のクラスのことを「基底クラス 」or 「親クラス 」or 「スーパークラス」といいます。
継承先のクラスのことを「派生クラス」 or「 子クラス」 or「 サブクラス」といいます。
継承の書き方
class クラス名 : 継承元のクラス名 |
- 継承するクラスは、クラス名の後に、コロン(:)と継承元のクラスを記述します。
- 以下は、MicrosoftのC# と .NET での継承のリンクです。
https://docs.microsoft.com/ja-jp/dotnet/csharp/tutorials/inheritance
クラスの継承のサンプルです。
using System;
class Class1
{
public string print1()
{
return "表示1";
}
}
class Class2 : Class1
{
public string print2()
{
return "表示2";
}
}
class Test1
{
static void Main()
{
Class2 c2 = new Class2();
Console.WriteLine(c2.print1());//表示1
Console.WriteLine(c2.print2());//表示2
}
}
2~8行目は、親クラスです。
9~15行目は、子クラスです。
9行目は、「Class2」の後に「:Class1」と記述することにより、Class2は、Class1を継承しています。
21行目のprint1メソッドは子クラスに存在しませんが実行できます。4行目の親クラスのメソッドを実行します。
→子クラスは、親クラスのメソッドを再実装しないで済んでいます。継承の利点です。
親クラスのコンストラクタを実行する(base)
親クラスのコンストラクタを実行するサンプルです。 baseを使用します。
using System;
namespace Project1
{
class Class1
{
public string colorName;
public Class1(string name)
{
this.colorName = name;
}
}
class Class2 : Class1
{
public Class2(string name) : base(name)
{
}
}
class Test1
{
static void Main()
{
Class1 c2 = new Class2("赤");
Console.WriteLine(c2.colorName); //赤
}
}
}
15行目は、コンストラクタです。
: base(引数)で親クラスのコンストラクタを実行します。
親クラスのメソッドを実行する(base)
親クラスのメソッドを実行するサンプルです。 baseを使用します。
using System;
class Class1
{
public string print1()
{
return "表示1";
}
}
class Class2 : Class1
{
public string print2()
{
return (base.print1());
}
}
class Test1
{
static void Main()
{
Class2 c2 = new Class2();
Console.WriteLine(c2.print2());//表示1
}
}
13行目はbaseキーワードで親クラスのメソッドを実行します。
クラスの継承を禁止する(sealed)
アクセス修飾子 sealed class クラス名 |
クラスの継承を禁止するサンプルです。sealedキーワードを使用します。
using System;
sealed class Class1
{
public string print1()
{
return "表示1";
}
}
//class Class2 : Class1
//{
//public string print2()
// {
// return "表示2";
// }
//}
class Test1
{
static void Main()
{
Class2 c2 = new Class2();
Console.WriteLine(c2.print1());//表示1
Console.WriteLine(c2.print2());//表示2
}
}
2行目は、sealedキーワードがついています。
9行目のクラスは、2行目のクラスを継承できません。コンパイルエラーになります。
関連の記事
C#入門 クラスの仕組みとサンプル
C# コンストラクタのサンプル
C# オーバーライドのサンプル
C# オーバーロードのサンプル
C# パーシャルクラスのサンプル