工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C# 継承

C# の継承

このチュートリアルでは、例を使用して C# の継承とその型について学習します。

C# では、継承によって既存のクラスから新しいクラスを作成できます。これは、オブジェクト指向プログラミング (OOP) の重要な機能です。

新しいクラスの作成元となるクラスは、基本クラス (親またはスーパークラス) と呼ばれます。そして、新しいクラスは派生クラス (子またはサブクラス) と呼ばれます

派生クラスは、基本クラスのフィールドとメソッドを継承します。これは、C# でのコードの再利用に役立ちます。


C# で継承を実行する方法

C# では、: を使用します。 継承を行うためのシンボル。たとえば、

class Animal {  
  // fields and methods
} 

// Dog inherits from Animal
class Dog : Animal {
  // fields and methods of Animal 
  // fields and methods of Dog 
}

ここでは、派生クラス Dog を継承しています。 基本クラス Animal から . クラスは Animal のフィールドとメソッドにアクセスできるようになりました class.<フィギュア>


例:C# の継承

using System;

namespace Inheritance {

  // base class
  class Animal { 

    public string name;

    public void display() {
      Console.WriteLine("I am an animal");
    }
    
  } 
  
  // derived class of Animal 
  class Dog : Animal {
    
    public void getName() {
      Console.WriteLine("My name is " + name);
    }
  }

  class Program {

    static void Main(string[] args) {

      // object of derived class
      Dog labrador = new Dog();

      // access field and method of base class
      labrador.name = "Rohu";
      labrador.display();

      // access method from own class
      labrador.getName();

      Console.ReadLine();
    }

  }
}

出力

I am an animal
My name is Rohu

上記の例では、サブクラス Dog を派生させました。 スーパークラス Animal から .ステートメントに注意してください、

labrador.name = "Rohu";

labrador.getName();

ここでは、ラブラドールを使用しています name にアクセスするための (Dog のオブジェクト) および display() 動物の クラス。これが可能なのは、派生クラスが基本クラスのすべてのフィールドとメソッドを継承しているためです。

名前にもアクセスしました Dog のメソッド内のフィールド クラス。


関係

C# では、継承は is-a 関係です。継承は、2 つのクラス間に is-a 関係がある場合にのみ使用します。たとえば、

を導き出すことができます 動物から クラス。同様に、アップル 果物から クラスと 乗り物から クラス。


C# 継承の保護されたメンバー

フィールドまたはメソッドを protected として宣言するとき 、同じクラスとその派生クラスからのみアクセスできます。

例:継承の保護されたメンバー

using System;

namespace Inheritance {

  // base class
  class Animal { 
    protected void eat() {
      Console.WriteLine("I can eat");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {
     static void Main(string[] args) {

      Dog labrador = new Dog();

      // access protected method from base class
      labrador.eat();

      Console.ReadLine();
    }
  }
}

出力

I can eat

上記の例では、Animal という名前のクラスを作成しました。 .このクラスには保護されたメソッド eat() が含まれています .

を導き出しました 動物のクラス クラス。声明に注目してください、

labrador.eat();

protected 以降 メソッドは派生クラスからアクセスでき、 eat() にアクセスできます のメソッド クラス。


継承の種類

継承には次の種類があります:

1.単一継承

単一継承では、単一の派生クラスが単一の基本クラスから継承されます。

<図>

2.マルチレベル継承

マルチレベル継承では、派生クラスがベースから継承され、同じ派生クラスが別のクラスのベース クラスとして機能します。

<図>

3.階層的継承

階層継承では、複数の派生クラスが単一の基本クラスから継承されます。

<図>

4.多重継承

多重継承では、1 つの派生クラスが複数の基本クラスから継承されます。 C# は多重継承をサポートしていません。 ただし、インターフェイスを介して多重継承を実現できます。

<図>

5.ハイブリッド継承

ハイブリッド継承は、2 種類以上の継承の組み合わせです。マルチレベル継承と階層継承の組み合わせは、ハイブリッド継承の一例です。

<図>

C# 継承でのメソッドのオーバーライド

基本クラスと派生クラスの両方に同じメソッドが存在する場合、派生クラスのメソッドは基本クラスのメソッドをオーバーライドします。これは、C# ではメソッドのオーバーライドと呼ばれます。たとえば、

using System;

namespace Inheritance {

  // base class
  class Animal { 
    public virtual void eat() {

      Console.WriteLine("I eat food");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {

    // overriding method from Animal
    public override void eat() {

      Console.WriteLine("I eat Dog food");
    }     
  }
  class Program {

    static void Main(string[] args) {
      // object of derived class
      Dog labrador = new Dog();

      // accesses overridden method
      labrador.eat();
    }
  }
}

出力

I eat Dog food

上記の例では、eat() メソッドは、基本クラスと派生クラスの両方に存在します。

eat() を呼び出すとき を使って object ラブラドール

labrador.eat();

Dog 内のメソッド と呼ばれます。これは、Dog 内のメソッドが Animal 内の同じメソッドをオーバーライドします .

virtual を使用していることに注意してください そしてオーバーライド それぞれ基本クラスと派生クラスのメソッドを使用します。ここで、


C# 継承の base キーワード

前の例では、派生クラスのメソッドが基本クラスのメソッドをオーバーライドすることがわかりました。

しかし、基本クラスのメソッドも呼び出したい場合はどうなるでしょうか?

その場合、base を使用します。 派生クラスから基底クラスのメソッドを呼び出すキーワード。

例:C# 継承の base キーワード

using System;

namespace Inheritance {

  // base class
  class Animal { 
    public virtual void eat() {

      Console.WriteLine("Animals eat food.");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {

    // overriding method from Animal
    public override void eat() {
      
      // call method from Animal class
      base.eat();
      
      Console.WriteLine("Dogs eat Dog food.");
    }     
  }
  class Program {

    static void Main(string[] args) {

      Dog labrador = new Dog();
      labrador.eat();
    }
  }
}

出力

Animals eat food.
Dogs eat Dog food.

上記の例では、eat() メソッドは、基本クラス Animal の両方に存在します 派生クラス Dog .声明に注目してください、

base.eat();

ここでは base を使用しました Animal のメソッドにアクセスするためのキーワード のクラス クラス。


C# における継承の重要性

継承の重要性を理解するために、状況を考えてみましょう。

正方形、長方形などの正多角形を扱っているとします。そして、入力に基づいてこれらのポリゴンの周囲を見つける必要があります.

1. 周長を計算する式はすべての正多角形に共通であるため、RegularPolygon を作成できます。 クラスとメソッド calculatePerimeter() 周長を計算します。

class RegularPolygon {

  calculatePerimeter() {
    // code to compute perimeter
  }
}

2. Square を継承します と長方形 RegularPolygon のクラス クラス。これらの各クラスには、辺の長さと数を格納するためのプロパティがあります。これは、すべてのポリゴンで異なるためです。

class Square : RegularPolygon {

  int  length = 0;
  int sides = 0;
}

length の値を渡します と側面 calculateperimeter() へ 周長を計算します。

このように、継承によってコードが再利用可能になり、より直感的になります。

例:継承の重要性

using System;

namespace Inheritance {

  class RegularPolygon {

      public void calculatePerimeter(int length, int sides) {

        int result = length * sides;
        Console.WriteLine("Perimeter: " + result);
      }
  }

  class Square : RegularPolygon {

    public int  length = 200;
    public int sides = 4;
    public void calculateArea() {

      int area = length * length;
      Console.WriteLine("Area of Square: " + area);
    }
  }

 class Rectangle : RegularPolygon {

    public int length = 100;
    public int breadth = 200;
    public int sides = 4;

    public void calculateArea() {
    
      int area = length * breadth;
      Console.WriteLine("Area of Rectangle: " + area);
    }
  }

  class Program {

    static void Main(string[] args) {

      Square s1 = new Square();
      s1.calculateArea();
      s1.calculatePerimeter(s1.length, s1.sides);
      

      Rectangle t1 = new Rectangle();
      t1.calculateArea();
      t1.calculatePerimeter(t1.length, t1.sides);
      
    }
  }
}     

出力

Area of Square: 40000
Perimeter: 800
Area of Rectangle: 20000
Perimeter: 400

上記の例では、RegularPolygon を作成しました。 正多角形の周長を計算するメソッドを持つクラス。

ここでは、スクエア長方形 RegularPolygon から継承 .

周長を計算する式はすべて共通なので、calculatePerimeter() を再利用しました。 基底クラスのメソッド。

また、形状によって面積を計算する式が異なるため、派生クラス内に面積を計算する別のメソッドを作成しました。


C言語

  1. C# クラスとオブジェクト
  2. C# アクセス修飾子
  3. C# 静的キーワード
  4. C# の抽象クラスとメソッド
  5. C# ネストされたクラス
  6. C# 部分クラスと部分メソッド
  7. C# の封印されたクラスとメソッド
  8. C++ のポリモーフィズム
  9. C++ でのデータの抽象化
  10. C# - プログラム構造
  11. C# - 基本構文