Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык 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() метод. Это указывает на то, что метод переопределяет метод базового класса.

Затем мы использовали объект Dog класс для доступа к makeSound() .

Если Собака класс не предоставил реализацию абстрактного метода makeSound() , Собака класс также должен был быть помечен как абстрактный.

Примечание :в отличие от наследования 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#.

Абстракция — одна из важных концепций объектно-ориентированного программирования. Это позволяет нам скрыть ненужные детали и показать только необходимую информацию.

Это помогает нам управлять сложностью, скрывая детали за более простой идеей более высокого уровня.

Практическим примером абстракции могут быть тормоза мотоцикла. Мы знаем, что делает тормоз. Когда мы нажимаем на тормоз, мотоцикл останавливается. Однако работа тормоза скрыта от нас.

Основным преимуществом сокрытия работы тормоза является то, что теперь производитель может по-разному реализовывать тормоза для разных мотоциклов. Однако то, что делает тормоз, будет таким же.

Пример:абстракция 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() в Мотоцикл скрыто.

Каждый мотоцикл имеет различную реализацию тормоза. Вот почему SportsBike делает собственную реализацию brake() и Горный велосипед делает собственную реализацию brake() .

Примечание :мы используем интерфейсы для достижения полной абстракции в C#. Чтобы узнать больше, посетите интерфейс C#.


Язык C

  1. Класс и объект С#
  2. Частичный класс C# и частичный метод
  3. Запечатанный класс и метод С#
  4. Классы и объекты С++
  5. Дружественные функции C++ и дружественные классы
  6. Java-класс и объекты
  7. Абстрактный класс Java и абстрактные методы
  8. Вложенный и внутренний класс Java
  9. Учебное пособие по абстрактному классу C # с примером:что такое абстракция?
  10. Java — объект и классы