HOWTO · Csharp

C# の複数のクラスから継承

この記事では、実装の助けを借りて、C# のインターフェイスの助けを借りて複数のクラスから継承する方法を学びます。

このページの内容

クラスまたはオブジェクトは、OOP 言語の 1つ以上の親オブジェクトまたはクラスから機能と特性を継承できます。サブクラスが親クラスのプロパティのいずれかまたはすべてへのアクセスを必要とする場合、継承が利用されます。

また、子のクラスが多くの基本クラスのコンストラクターをマージする必要がある場合にも便利です。このチュートリアルでは、C# で多重継承を実装する方法に取り組みます。

C# で多重継承を実装する

C# 言語で最もよく知られている簡単な手法は、インターフェイスの利用です。ここに、BMI を計算するために複数のクラスからの継承を実装する例があります。

このステップバイステップで学習します。まず、C# で使用されるメソッドにアクセスするために、システムライブラリをインポートする必要があります。

using System;

setter メソッドを使用して Attributes という名前のクラスを作成します。このクラスを使用して、他のクラスから値を取得します。その中に weightheight という名前の 2つの double 型変数を宣言します。

それらは保護されたままになります。つまり、クラス外の人は利用できなくなります。次に、提供された値を weight に割り当てるダブルタイプ引数 w を使用してメソッド setWeight() を作成し、同じで height の値を設定する setHeight() メソッドを作成しますこれと同じように。

class Attributes {
  protected double weight;
  protected double height;
  public void setWeight(double w) {
    weight = w;
  }

  public void setHeight(double h) {
    height = h;
  }
}

次に、double データ型の引数 age をとる double 型メソッド retrieveAge を含むインターフェース RetrieveAge を作成します。

public interface RetrieveAge {
  double retrieveAge(double age);
}

AttributesRetrieveAge の 2つのクラスを継承する BMI クラスを作成します。このクラス内の親クラスから値を取得するための 4つのメソッドを作成します。

最初のメソッドは retrieveBMI() と呼ばれる double データ型で、親クラス Attributes から重みと高さを取得し、重みを高さの 2 乗で除算して結果を返します。次の 2つのメソッド、retrieveHeight()retrieveWeight() は、高さと重みの値をフェッチして返します。

最後のメソッド retrieveAge() は、ダブルタイプの引数 age を取り、それを返す RetrieveAge からメソッドを拡張します。

class BMI : Attributes, RetrieveAge {
  public double retrieveBMI() {
    return (weight / (height * height));
  }

  public double retrieveHeight() {
    return height;
  }

  public double retrieveWeight() {
    return weight;
  }

  public double retrieveAge(double age) {
    return age;
  }
}

Main() 関数を持つ最終クラスを作成します。Main() 関数内で、BMI クラスインスタンスを作成します。

setHeight() および setWeight() メソッドを使用して、身長と体重を割り当てます。最後に、身長、体重、計算された BMI、年齢を出力する必要があります。

完全なコード:

using System;

class Attributes {
  protected double weight;
  protected double height;
  public void setWeight(double w) {
    weight = w;
  }

  public void setHeight(double h) {
    height = h;
  }
}

public interface RetrieveAge {
  double retrieveAge(double age);
}

class BMI : Attributes, RetrieveAge {
  public double retrieveBMI() {
    return (weight / (height * height));
  }

  public double retrieveHeight() {
    return height;
  }

  public double retrieveWeight() {
    return weight;
  }

  public double retrieveAge(double age) {
    return age;
  }
}

class TotalBMI {
  static void Main() {
    BMI bmi = new BMI();
    bmi.setWeight(80);
    bmi.setHeight(2.07);

    Console.WriteLine("Your Height: {0} m", bmi.retrieveHeight());
    Console.WriteLine("Your Weight: {0} kg", bmi.retrieveWeight());
    Console.WriteLine("BMI: {0}", bmi.retrieveBMI());
    Console.WriteLine("Age: {0}", bmi.retrieveAge(40));
  }
}

出力:

Your Height: 2.07 m
Your Weight: 80 kg
BMI: 18.6702140073281
Age: 40