2022年02月02日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 477 count

baseキーワード: 基底クラスのメンバーにアクセスせよ!

Written By: 川俣 晶連絡先

この章のテーマ §

 baseキーワードについて学びます。baseキーワードの機能は主に2つあります。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, クラスの基礎、継承の基礎、コンストラクタの基礎、thisキーワード

解説 §

 baseキーワードの役割は2つあります。

 一つは、基底クラスにアクセスする方法です。thisを使うと【このインスタンス】にアクセスできますが、thisの代わりにbaseを使うと、【このインスタンスを基底クラスとして使う】に機能が変化します。これで継承の際に上書きしてしまった場合でも、上書き前の機能を使用できます。

 もう1つは、基底クラスのコンストラクタへのアクセスです。コンストラクタでthisの代わりにbaseを使うと、その引数の基底クラスのコンストラクタを呼び出すことができいます。引数が異なる基底クラスのコンストラクタを使いたい場合には便利です。

罠の数々 §

  • 静的メソッド内から base キーワードを使うとエラーになる。base はthisの特殊なバリエーションなので【このインスタンス】というニュアンスを持つ。インスタンスと関係なく存在する静的なメンバーは対象にできない。その場合は、baseの代わりに基底クラス名を直接書けば良い

参考リンク §

base (C# リファレンス)

サンプルソース: kw_base §

var x = new MyClassB();

class MyClassA

{

    public virtual void Sub() => Console.WriteLine("A.Sub called");

    public MyClassA(string messasge) => Console.WriteLine($"MyClassA's constructor called: {messasge}");

}

class MyClassB : MyClassA

{

    public override void Sub() => Console.WriteLine("B.Sub called");

    public MyClassB() : base("from MyClassB")

    {

        Console.WriteLine("MyClassB's constructor called");

        // 無指定のアクセス

        Sub();

        // thisアクセス

        this.Sub();

        // baseアクセス

        base.Sub();

    }

}

実行結果 §

MyClassA's constructor called: from MyClassB

MyClassB's constructor called

B.Sub called

B.Sub called

A.Sub called

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。

var x = new C();

class A

{

    public virtual void Sub() => Console.WriteLine("A");

}

class B : A

{

    public override void Sub() => Console.WriteLine("B");

}

class C : B

{

    public override void Sub() => Console.WriteLine("C");

}

class D : C

{

    public override void Sub() => base.base.Sub();

}

  1. A
  2. B
  3. C
  4. コンパイルエラー
  5. 実行時例外

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
02月
04日
拡張メソッド: 拡張できない型にメソッドを追加しちゃおう
3days 3 count
total 629 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
02月
01日
partial: partialクラスとpartialメソッドは似ているが違う
3days 2 count
total 517 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20220202092825
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.