Web Analytics Made Easy - StatCounter

Economics Of TEC

RPA,経済学,IT技術などに関する情報を発信しています。

【C#入門】継承とは?役割と使い方をご紹介

f:id:WillSpecter:20200811195608j:plain

 

これまで、メソッド、クラス、インスタンスカプセル化、プロパティなどを順に紹介してきました。今回は、オブジェクト指向で便利な機能の一つ、「継承」を紹介させていただきます。

 

◆これまでの記事◆

 

継承とは

一般的に継承と言えば、身分や仕事を引き継ぐことを意味しますが、オブジェクト指向においても、既存のクラスの属性を新しいクラスに引き継ぐことが可能で、これを継承と呼んでいます。

また、継承元のクラスのことを基本クラス(親クラス)、継承したクラス(子クラス)を派生クラスと呼びます。

なぜ継承が必要なのか

継承を使う目的は、ずばり「プログラムの重複を避ける」ためです。

例えば、人狼ゲームで考えてみましょう。

 

村人と人狼の2つのクラスを作成したとします。そこには、変数とメソッドをそれぞれ持たせているのですが、名前とレベル、議論がそれぞれのクラスで重複しています。

 

f:id:WillSpecter:20200813100348p:plain

この状態で継承を利用しなければ、各クラスで変数の指定と議論メソッドの作成が必要になります。

 

まだ、クラスが2つの場合は何とかなりますが、そこに"占い師"や"騎士"というキャラのクラスを追加させていくとどうでしょう。

 

毎回、変数の名前や共通しているメソッドの議論を書いていかなければなりません。

さらに、「レベルという変数はなくしましょう」という仕様の変更が発生した場合に、全てのクラスで修正が発生します。

 

つまり、継承を使わなければ開発、保守どちらにおいても”手間”が発生します。継承を作成するのは難しくありませんので、是非トライしてみてください! 

基本的な継承の書き方

それでは、実際にどのように書くのか先ほどの例をもとにご紹介いたします。

 

①村人と人狼のクラスを準備します(派生クラス)。

②共通している変数やメソッドを、キャラクタークラス(基本クラス)に移します。

③村人クラスや人狼クラスから、キャラクタークラスを継承させます。

 継承の書き方はこのようになります。

class 派生クラス:基本クラス {}

 

具体的にプログラムがどのように変わるのか、紹介します。

 

継承を使わない書き方(村人クラス)

継承を使わない書き方として、村人クラスを作成しました。nameやhpという変数、DiscussやVoteというメソッドを持っています。

namespace JinroGame1
{
    class Murabito1
    {
        public string name;
        public int hp;
        
            public void Discuss()
        {
            Console.WriteLine("議論した");
        }

            public void Vote()
        {
            Console.WriteLine("投票した");
        }
    }
}

ここでは割愛していますが、村人クラスと同じように、人狼クラスも作成します。

 

違いは、下記の中のメソッドが殺害か投票かという点のみなので、VoteメソッドをKillメソッドに置き換えて作成します。

f:id:WillSpecter:20200813100348p:plain

 

継承を使ったキャラクタークラス(基本クラス)

一方で、先ほどの村人クラスと人狼クラスから共通した変数とメソッドを抜き出して、新しいクラスを作成します。

今回は基本クラスを Charaとしています。

namespace JinroGame2
{
    class Chara
    {
        public string name;
        public int hp;

        public void Discuss()
        {
            Console.WriteLine("議論した");
        }
    }
}

継承を使った村人クラス

では、先ほど作成した基本クラスを、村人クラス(派生クラス)に設定してみましょう。3行目の Class Murabito:Chara継承のために追加しました。

 

namespace JinroGame2
{
    class Murabito1:Chara
    {
        public void Vote()
        {
            Console.WriteLine("投票した");
        }
    }
}

 

このあと、Mainメソッドから村人クラスと人狼クラスを呼び出しますが、そこで基本クラスに設定していたDiscussメソッドも呼び出すことができます。

 

        static void Main(string[] args)
        {
            Murabito1 murabito1 = new Murabito1();
            Jinro1 jinro1 = new Jinro1();

            murabito1.Discuss();
            jinro1.Discuss();

            murabito1.Vote();
            jinro1.Kill();
        }

 

以上です。とても簡単ですね! 

ひとこと

プログラムを開発するとき、可読性を上げることが大切だと思いますが、より簡素に書くことも重要なポイントだと思います。類似する処理は継承で一つにまとめることで、可読性も上がり、手間も減りますので、是非取り入れてみてください!

 

今回の説明は「確かな力が身につくC# 「超」入門」を参考にさせていただきましたが(例題はオリジナルです)、「もっと前から読んでおきたかった!」と痛感しています、、。もし、C#について学び始めたという方は是非参考にしてみてください!(2020年7月に出版された新書です(^^)

 

 

◆合わせて読みたい◆