Class の継承

GCM=8  LCM=96

C# で GCM Class を継承して LCM Class を定義します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. GCM Class を継承して LCM Class を定義します。
    継承元になる GCM Class(最大公約数)のソースコードです。
    継承元になるクラスを基本クラスまたは、スーパークラスなどと呼びます。
    基本クラスは今まで説明した Object Class と同様ですが、今回は Constructor で GCM を計算しています。
        // GCM Class の定義
        class GCM
        {
            private int   wk;
            private int   val;
    
            public GCM(int v1, int v2)
            {   wk= v1;
                val= v2;
                while(wk!=val)
                {   if (wk>val) wk-= val;
                    else        val-= wk;
                }
            }
            public int  GetGcm()
            {
                return val;
            }
        }
    
  2. GCM Class(最大公約数)を継承する LCM Class(最小公倍数)です。
    GCM Class を継承する LCM Class を派生クラスまたは、サブクラスなどと呼びます。
    class LCM に続いて「:」を付けて基本クラス(GCM)を指定して下さい。
    LCM の Constructor から GCM の Constructor を呼び出します。
    public LCM(int v1, int v2) : base(v1, v2)
    base は基本クラスの Constructor を呼び出すキーワードです。
    C#では継承できる Class は一個だけです。
    LCM Class でも Constructor で LCM を計算しています。
    この時点で GetGcm() で最大公約数を参照していることに注目して下さい。
    つまり GCM の Constructor を実行してから LCM の Constructor が実行されます。
        // LCM Class の定義
        class LCM : GCM
        {
            private int   val;
    
            public LCM(int v1, int v2) : base(v1, v2)
            {
                val= v1*v2/GetGcm();
            }
            public int GetLcm()
            {
                return val;
            }
        }
    
  3. Main() 関数です。
    LCM Class を定義すると、継承している GCM Class のメソッドも使えます。
        class console
        {
            public static int Main()
            {
                LCM Lcmcls = new LCM(24, 32);
    
                Console.WriteLine("GCM={0}  LCM={1}", Lcmcls.GetGcm(), Lcmcls.GetLcm());
                System.Console.ReadLine();
                return 0;
            }
        }
    
  4. Object Class を継承したゲームの例は 前田稔の超初心者のプログラム入門 から 「XNA/Base Class を継承する」を参照して下さい。

ファイルを分ける

  1. Main() メソッドと Object Class のファイルを分けてみましょう。
    分けるのは簡単で、Console.cs に加えて Gcm.cs, Lcm.cs をプロジェクトに追加するだけです。
  2. Console.cs ファイルです。
    /*********************************************************/
    /*★ GCM Class を継承して LCM Class を定義    前田 稔  ★*/
    /*********************************************************/
    using System;
    
    namespace Gcm_Lcm
    {
        class console
        {
            public static int Main()
            {
                LCM Lcmcls = new LCM(24, 32);
    
                Console.WriteLine("GCM={0}  LCM={1}", Lcmcls.GetGcm(), Lcmcls.GetLcm());
                System.Console.ReadLine();
                return 0;
            }
        }
    }
    
  3. Gcm.cs ファイルです。
    /************************************/
    /*★ GCM Class を定義    前田 稔  ★*/
    /************************************/
    namespace Gcm_Lcm
    {
        class GCM
        {
            private int   wk;
            private int   val;
    
            public GCM(int v1, int v2)
            {   wk= v1;
                val= v2;
                while(wk!=val)
                {   if (wk>val) wk-= val;
                    else        val-= wk;
                }
            }
            public int GetGcm()
            {
                return val;
            }
        }
    }
    
  4. Lcm.cs ファイルです。
    /***************************************************/
    /*★ GCM を継承して LCM Class を定義    前田 稔  ★*/
    /***************************************************/
    namespace Gcm_Lcm
    {
        class LCM : GCM
        {
            private int   val;
    
            public LCM(int v1, int v2) : base(v1, v2)
            {
                val= v1*v2/GetGcm();
            }
            public int GetLcm()
            {
                return val;
            }
        }
    }
    
  5. [追加][既存項目]からソースファイルをプロジェクトに加えて下さい。
    メニューの [デバッグ] から [デバッグ開始] または [デバッグなしで開始] を選択すれば実行されます。
    ファイルを分けたからと言って、今までと何も変わりません。

超初心者のプログラム入門(C# Frame Work)