Web Analytics Made Easy - StatCounter

Economics Of TEC

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

【C#入門】オーバーライド(override)とは?役割と使い方をご紹介

f:id:WillSpecter:20200811195608j:plain

 

これまで、メソッド、クラス、インスタンスカプセル化、プロパティ、継承などを順に紹介してきました。今回は、継承するときによく使う「オーバーライド(override)」を紹介させていただきます。

 

◆これまでの記事◆

 

オーバーライドとは

英語でoverrideとは優先する、という意味があります。 ITの分野では、ある場所で定義された設定や手続き、属性などを、別の定義に優先することを指します。

 

C#でも、継承と一緒に使えるorverrideという機能があり、本クラスで作成したメソッドの内容を派生クラスで定義しなおすことが可能です。

 

利用するメリットとしては、継承した部分を目的に応じた形に書き換えることで柔軟な開発が出来ることです。

 

継承について詳しく学習したい方は、こちらの記事を参考にしてください^^
 

例えば、人狼ゲームで考えてみましょう。前回の継承についての記事で、基本クラスであるキャラクタークラスと村人クラス、人狼クラスを作成しました。その中で、基本クラスのDiscussで人狼は"議論しない"に変更したいときに、人狼クラスでオーバーライドすることができます。

基本的なオーバーライドの書き方

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

 

設定すべき箇所を2つです。

①オーバーライドされる基本クラスのメソッド:virtualをつける

 オーバーライドしても良いよ、という印です。仮想メソッドとも呼びます。

        virtual 戻り値の型 メソッド名(引数)
        {
            メソッドの処理内容
        }

②オーバーライドする派生クラスのメソッド:overrideをつける

 オーバーライドしますよ、という宣言です。

        override 戻り値の型 メソッド名(引数)
        {
            メソッドの処理内容
        }
注意事項としては、メソッド名や引数、戻り値の型が両者で一致している必要があることです。

 

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

基本クラスの設定例

今回は、基本クラスでname、hpの変数とDisscussというメソッドを設定しています。その中で、DiscussメソッドをオーバーライドできるようにVirtualを設定します。

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

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

派生クラスでのオーバーライド例

続いて、派生クラスでオーバーライドしたいメソッドを作成します。

下記では、Discussというメソッドに対してoverrideしています。

namespace JinroGame2
{
    class Jinro1 : Chara
    {
        public override void Discuss()
        {
            Console.WriteLine("議論しなかった");
        }

        public void Kill()
        {
            Console.WriteLine("殺害した");
        }
    }
}

 

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

ひとこと

オーバーライドについて、難しく考えてしまいがちのようですが、これまで紹介してきた順番で勉強すれば、理解しやすいのではないかと思います。

オブジェクト指向の中でまだピンと来ていない箇所があれば、過去記事も参考にしてみてください!

 

◆合わせて読みたい◆

 

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