interface-2

GCM(24,32) = 8
インターフェースで Constructor を使います。

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

Constructor を使う

  1. インターフェースを継承したクラスで Constructor を使います。
    /************************************/
    /*★ Interface IGcmLcm    前田 稔 ★*/
    /************************************/
    using System;
    
    public interface IGcmLcm
    {
        int Gcm();
        int Lcm();
    }
    
    class MyClass : IGcmLcm
    {
        int d1;
        int d2;
    
        public MyClass(int n, int m)
        {
            d1= n;
            d2= m;
        }
    
        public int Gcm()
        {
            int n,m;
            n= d1;
            m= d2;
            while(n!=m)
            {   if (n>m)    n-= m;
                else        m-= n;
            }
            return n;
        }
    
        public int Lcm()
        {
            return d1*d2/Gcm();
        }
    }
    
    class console
    {
        public static void Main()
        {
            MyClass mc = new MyClass(24,32);
            Console.WriteLine("GCM(24,32) = {0}", mc.Gcm());
        }
    }
    
  2. インターフェースの宣言 IGcmLcm です。
    Gcm と Lcm のメソッドがパラメータ無しで宣言されています。
    interface にコンストラクタやフィールドを含めることは出来ません。
    public interface IGcmLcm
    {
        int Gcm();
        int Lcm();
    }
    
  3. IGcmLcm を継承した MyClass クラスです。
    d1, d2 の領域とコンストラクタと Gcm メソッドと Lcm メソッドを実装します。
    class MyClass : IGcmLcm
    {
        int d1;
        int d2;
    
        public MyClass(int n, int m)
        {
            d1= n;
            d2= m;
        }
    
        public int Gcm()
        {
            ・・・
        }
    
        public int Lcm()
        {
            return d1*d2/Gcm();
        }
    }
    
  4. MyClass クラスの使い方は普通のクラスと同じです。
        public static void Main()
        {
            MyClass mc = new MyClass(24,32);
            Console.WriteLine("GCM(24,32) = {0}", mc.Gcm());
        }
    

複数のインターフェースを継承

  1. このプログラムの実行結果です。
    1.23f + 3.14f = 4.37
    1.23f - 3.14f = -1.91
    Max(24,32) = 32
    Min(24,32) = 24
    
  2. 複数のインターフェースを継承することも出来ます。
    IAddSub と IMaxMin のインターフェースの宣言です。
    public interface IAddSub
    {
        float Add(float a, float b);
        float Sub(float a, float b);
    }
    
    public interface IMaxMin
    {
        int Max(int n, int m);
        int Min(int n, int m);
    }
    
  3. IAddSub と IMaxMin を継承する MyClass クラスでは、カンマで区切って指定します。
    二つのクラスのメソッドを実装して下さい。
    class MyClass : IAddSub, IMaxMin
    {
        ・・・
    }
    
  4. MyClass クラスの使い方は普通のクラスと同じです。
        public static void Main()
        {
            MyClass mc = new MyClass();
            Console.WriteLine("1.23f + 3.14f = {0}", mc.Add(1.23f,3.14f));
            Console.WriteLine("1.23f - 3.14f = {0}", mc.Sub(1.23f,3.14f));
            Console.WriteLine("Max(24,32) = {0}", mc.Max(24,32));
            Console.WriteLine("Min(24,32) = {0}", mc.Min(24,32));
        }
    

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