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

C# の抽象クラスとメソッド

C# の抽象クラスとメソッド

このチュートリアルでは、例を使用して C# の抽象クラスとメソッドについて学習します。

抽象クラス

C# では、抽象クラスのオブジェクトを作成できません。 abstract を使用します 抽象クラスを作成するためのキーワード。たとえば、

// create an abstract class
abstract class Language {
  // fields and methods
}
...

// try to create an object Language
// throws an error
Language obj = new Language();

抽象クラスは、抽象メソッド (本体のないメソッド) と非抽象メソッド (本体のあるメソッド) の両方を持つことができます。たとえば、

abstract class Language {

  // abstract method
  public abstract void display1();

  // non-abstract method
  public void display2() {
    Console.WriteLine("Non abstract method");
  }
}

先に進む前に、C# の継承について確認してください。


抽象クラスの継承

抽象クラスのオブジェクトを作成できないため、そこから派生クラスを作成する必要があります。派生クラスのオブジェクトを使用して抽象クラスのメンバーにアクセスできるようにします。たとえば、

using System;
namespace AbstractClass {

  abstract class Language {

    // non-abstract method
    public void display() {
      Console.WriteLine("Non abstract method");
    }
  }

  // inheriting from abstract class
  class Program : Language {

    static void Main (string [] args) {
      
      // object of Program class
      Program obj = new Program();

      // access method of an abstract class
      obj.display();

      Console.ReadLine();
    }
  }
}

出力

Non abstract method

上記の例では、Language という名前の抽象クラスを作成しました。 .クラスに非抽象メソッド display() が含まれています .

プログラムを作成しました 抽象クラスを継承するクラス。声明に注目してください、

obj.display();

ここで、obj 派生クラス Program のオブジェクトです .オブジェクト obj を使用して抽象クラスのメソッドを呼び出しています .

注意 :抽象クラスは基本クラスとしてのみ使用できます。これが、抽象クラスをシールできない理由です。詳細については、C# の封印されたクラスとメソッドを参照してください。


C# 抽象メソッド

本体を持たないメソッドは、抽象メソッドとして知られています。 abstract を使用します 抽象メソッドを作成するためのキーワード。たとえば、

public abstract void display();

ここで、display() 抽象メソッドです。抽象メソッドは、抽象クラス内にのみ存在できます。

非抽象クラスが抽象クラスを継承する場合、抽象メソッドの実装を提供する必要があります。

例:抽象メソッドの実装

using System;
namespace AbstractClass {

  abstract class Animal {

    // abstract method
    public abstract void makeSound();
  }

  // inheriting from abstract class
  class Dog : Animal {

    // provide implementation of abstract method
    public override void makeSound() {

      Console.WriteLine("Bark Bark");

    }
  }
  class Program  {
    static void Main (string [] args) {
      // create an object of Dog class
      Dog obj = new Dog();
      obj.makeSound();    

      Console.ReadLine(); 
    }
  }
}

出力

Bark Bark 

上記の例では、Animal という名前の抽象クラスを作成しました。 .抽象メソッド makeSound() があります クラス内。

を飼っています Animal を継承するクラス クラス。 クラスは、抽象メソッド makeSound() の実装を提供します .

// provide implementation of abstract method
public override void makeSound() {

  Console.WriteLine("Bark Bark");

}

override を使用していることに注意してください makeSound() で 方法。これは、メソッドが基本クラスのメソッドをオーバーライドしていることを示しています。

次に、のオブジェクトを使用しました makeSound() にアクセスするクラス .

なら クラスは、抽象メソッド makeSound() の実装を提供していませんでした 、 class も抽象としてマークされているはずです。

注意 :C# の継承とは異なり、virtual は使用できません 基本クラスの抽象メソッドを使用します。これは、抽象クラスが暗黙的に仮想であるためです。


get および set アクセサーを持つ抽象クラス

get および set アクセサーを抽象としてマークできます。たとえば、

using System;
namespace AbstractClass {
  abstract class Animal {
    
    protected string name;
    // abstract method
    public abstract string Name {
      get;
      set;
    }
  }

  // inheriting from abstract class
  class Dog : Animal {

    // provide implementation of abstract method
    public override string Name {
      get {
        return name;
      }
      set {
        name = value; 
      }
    }
   
  }
  class Program  {
    static void Main (string [] args) {
      // create an object of Dog class
      Dog obj = new Dog();  
      obj.Name = "Tom";
      Console.WriteLine("Name: " + obj.Name); 

      Console.ReadLine();
    }
  }
}

出力

Name: Tom

上記の例では、get および set アクセサーを抽象としてマークしました。

obj.Name = "Tom";
Console.WriteLine("Name: " + obj.Name);

name の値を設定および取得しています 抽象クラス Animal のフィールド 派生クラス Dog のオブジェクトを使用 .


抽象クラスのコンストラクタにアクセス

抽象クラスもコンストラクタを持つことができます。たとえば、

using System;
namespace AbstractClass {
  abstract class Animal {
    
    public Animal() {
      Console.WriteLine("Animal Constructor");
    }
  }

  class Dog : Animal {
    public Dog() {
      Console.WriteLine("Dog Constructor");
    }   
  }

  class Program  {
    static void Main (string [] args) {
      // create an object of Dog class
      Dog d1 = new Dog();  

      Console.ReadLine();
    }
  }
}

出力

Animal Constructor
Dog Constructor

上記の例では、抽象クラス Animal 内にコンストラクターを作成しました。 .

Dog d1 = new Dog();

ここで、派生クラス Dog のオブジェクトを作成すると、 抽象クラス Animal のコンストラクタ も呼び出されます。

注意 :抽象クラス内でデストラクタを使用することもできます。


C# の抽象化

抽象クラスは、C# で抽象化を実現するために使用されます。

抽象化は、オブジェクト指向プログラミングの重要な概念の 1 つです。不必要な詳細を隠して、必要な情報だけを表示することができます。

これにより、よりシンプルで高レベルのアイデアで詳細を隠し、複雑さを管理することができます。

抽象化の実用的な例は、バイクのブレーキです。私たちはブレーキが何をするかを知っています。ブレーキを踏むとバイクが止まります。ただし、ブレーキの働きは私たちには隠されています。

ブレーキの動作を隠すことの主な利点は、メーカーがバイクごとに異なるブレーキを実装できるようになったことです。ただし、ブレーキの機能は同じです。

例:C# の抽象化

using System;
namespace AbstractClass {
  abstract class MotorBike {
    
    public abstract void brake();
  }

  class SportsBike : MotorBike {

    // provide implementation of abstract method
    public override void brake() {
      Console.WriteLine("Sports Bike Brake");
    }
   
  }

  class MountainBike : MotorBike {

    // provide implementation of abstract method
    public override void brake() {      
      Console.WriteLine("Mountain Bike Brake");
    }
   
  }
  class Program  {
    static void Main (string [] args) {
      // create an object of SportsBike class
      SportsBike s1 = new SportsBike();  
      s1.brake();

      // create an object of MountainBike class
      MountainBike m1 = new MountainBike();
      m1.brake();

      Console.ReadLine();
    }
  }
}

出力

Sports Bike Brake
Mountain Bike Brake

上記の例では、抽象クラス MotorBike を作成しました。 .抽象メソッド brake() があります .

brake() として brake() の実装である抽象メソッドです。 バイクで は隠されています。

バイクごとにブレーキの実装が異なります。これがSportsBikeの理由です brake() の独自の実装を作成します そしてマウンテンバイク brake() の独自の実装を作成します .

注意 :インターフェイスを使用して、C# で完全な抽象化を実現します。詳細については、C# インターフェイスをご覧ください。


C言語

  1. C# クラスとオブジェクト
  2. C# 部分クラスと部分メソッド
  3. C# の封印されたクラスとメソッド
  4. C++ クラスとオブジェクト
  5. C++ フレンド関数とフレンド クラス
  6. Java クラスとオブジェクト
  7. Java 抽象クラスと抽象メソッド
  8. Java のネストされた内部クラス
  9. 例を含む C# 抽象クラスのチュートリアル:抽象化とは?
  10. Java - オブジェクトとクラス
  11. Java-抽象化