継承は、既存のクラス(基底クラス)のメンバーを別のクラス(派生クラス)に引き継ぐ仕組みです。派生クラスは基底クラスのメンバーをそのまま使えるほか、新しいメンバーを追加できます。
class B : A の構文を理解できるbase キーワードでコンストラクタ連鎖と基底メンバーへのアクセスができるobject の位置づけを説明できる書式:継承の定義
1
2
3
class 派生クラス名 : 基底クラス名
{
}
| 要素 | 説明 |
|---|---|
派生クラス名 |
新しく定義するクラスの名前 |
: |
継承を表す記号 |
基底クラス名 |
メンバーを引き継ぐ元のクラス名 |
1
2
3
4
5
6
7
8
class A
{
public void M() { Console.WriteLine("A.M"); }
}
class B : A
{
}
B は A を継承しています。B のインスタンスから A.M() を呼び出せます。
1
2
B b = new B();
b.M();
1
A.M
派生クラスには、基底クラスにないメンバーを追加できます。
1
2
3
4
5
6
7
8
9
class A
{
public void M() { Console.WriteLine("A.M"); }
}
class B : A
{
public void N() { Console.WriteLine("B.N"); }
}
B のインスタンスは M() と N() の両方を持ちます。A のインスタンスは M() のみです。
base キーワードbase は、派生クラスから基底クラスのメンバーに明示的にアクセスするキーワードです。
書式:基底クラスのメンバーへのアクセス
1
base.メンバー名
書式:コンストラクタ連鎖
1
2
3
4
5
6
class 派生クラス名 : 基底クラス名
{
public 派生クラス名(引数リスト) : base(引数リスト)
{
}
}
| 要素 | 説明 |
|---|---|
base.メンバー名 |
基底クラスのメンバーを呼び出す |
: base(...) |
派生クラスのコンストラクタから基底クラスのコンストラクタを呼ぶ |
基底クラスにパラメーターありのコンストラクタしかない場合、派生クラスでは : base(...) が必須です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A
{
public int Value { get; }
public A(int value)
{
Value = value;
}
}
class B : A
{
public B(int value) : base(value)
{
}
}
B のコンストラクタが呼ばれると、: base(value) によって先に A のコンストラクタが実行されます。
objectC# では、1 つのクラスが継承できる基底クラスは 1 つだけです(単一継承)。継承は何段でもつなげられます。
1
2
3
class A { }
class B : A { }
class C : B { }
class キーワードで定義したすべてのクラスは、明示しなくても暗黙的に object を継承します。object は C# におけるすべての型の共通基底クラスです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A
{
public A(int value) { }
}
// ❌ NG: 基底クラスにパラメーターなしコンストラクタがないため base(...) を省略するとコンパイルエラー
class B : A
{
public B(int value) { }
}
// ✅ OK: base(...) で基底コンストラクタを明示的に呼ぶ
class B : A
{
public B(int value) : base(value) { }
}
class B : A で B は A を継承するbase.メンバー名 で基底クラスのメンバーへ明示的にアクセスできる: base(...) でコンストラクタ連鎖を記述するobject を暗黙的な基底クラスとして持つclass B : A における : は何を意味しますか?A に public A(int x) しかないとき、派生クラス B のコンストラクタはどのように書きますか?次のコードはコンパイルできますか?理由とともに答えてください。
1
2
3
class A { }
class B : A { }
class C : A, B { }
B が A を継承することを表す記号です。public B(int x) : base(x) { } と書きます。型変換と型チェック では、継承関係にある型の間での変換と確認方法を学びます。