Что такое интерфейс в C# с примером

⚡ Умное резюме

В C# интерфейс определяетtracЭто класс, который определяет, какие методы и свойства должен реализовывать класс, не предоставляя при этом сам код. Реализующий класс обеспечивает конкретное поведение, позволяя использовать слабую связанность и множественное наследование между несвязанными типами.

  • 🔗 В лице tract: Интерфейс определяет сигнатуры методов и свойств, которые должен определить каждый реализующий его класс.
  • Нет реализации: Интерфейс содержит только объявления, поэтому фактический код метода пишется классом.
  • 🔑 Ключевое слово Ключевое слово interface создает тип, а класс использует двоеточие для его реализации.
  • 🔀 Несколько интерфейсов: Один класс может реализовывать множество интерфейсов, что делает C# похожим на множественное наследование.
  • Интерфейс против абсtracкласс Т: Интерфейсы определяют только поведение, в то время как абстракцииtracКлассы t также могут содержать общее состояние и код.
  • 🤖 Помощь ИИ: GitHub Copilot генерирует интерфейсы и реализации, а конвейеры ML.NET полагаются на преобразователи на основе интерфейсов.tracц.

Интерфейс в C #

Что такое интерфейс в C#?

An Интерфейс В C# используется вместе с классом для определения конфигурации.tracЭто соглашение о том, что класс будет предоставлять приложению. Интерфейс определяет, какие операции может выполнять класс. Интерфейс объявляет свойства и методы. Класс должен точно определить, что будет делать метод.

Давайте рассмотрим пример интерфейса путем изменения классов в нашем Консольном приложении. Обратите внимание: мы не будем запускать код, поскольку нет ничего, что можно было бы запустить с помощью интерфейса.

Пример интерфейса C#

Давайте создадим интерфейсный класс. Класс будет называться «Guru99Interface." Затем наш основной класс будет расширять определенный интерфейс. Весь код необходимо написать в файле Program.cs.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 interface IGuru99Interface
 {
  void SetTutorial(int pID, string pName);
  String GetTutorial();
 }

 class Guru99Tutorial : IGuru99Interface
 {
  protected int TutorialID;
  protected string TutorialName;

  public void SetTutorial(int pID, string pName)
  {
   TutorialID = pID;
   TutorialName = pName;
  }

  public String GetTutorial()
  {
   return TutorialName;
  }

  static void Main(string[] args)
  {
   Guru99Tutorial pTutor = new Guru99Tutorial();

   pTutor.SetTutorial(1,".Net by Guru99");

   Console.WriteLine(pTutor.GetTutorial());

   Console.ReadKey();
  }
 }
}

Code Объяснение:-

Здесь мы объясняем важные разделы кода

Пример интерфейса C#

  1. Сначала мы определяем интерфейс, который называется «Guru99Интерфейс.” Обратите внимание, что ключевое слово «интерфейс» используется для определения интерфейса.
  2. Далее мы определяем методы, которые будут использоваться нашим интерфейсом. В данном случае мы определяем те же методы, которые использовались во всех предыдущих примерах. Обратите внимание, что интерфейс просто объявляет методы. Он не определяет код в них.
  3. Затем мы делаем свой GuruКласс 99Tutorial расширяет интерфейс. Здесь мы пишем код, определяющий различные методы, объявленные в интерфейсе. Такой подход позволяет достичь следующих результатов.
    • Это гарантирует, что класс, Guru99Tutorial добавляет только тот код, который необходим для методов «SetTutorial» и «GetTutorial», и ничего больше.
    • Это также гарантирует, что интерфейс будет вести себя как...tracт. класс должен соблюдать правилаtracт. Так что, если конtracТам сказано, что у него должно быть два метода: «SetTutorial» и «GetTutorial», так оно и должно быть.

Интерфейс C# против Abstracт класс

Часто начинающие задаются вопросом, чем интерфейс C# отличается от интерфейса C#. ABStracт классОба определяют понятие «кон».tracДругие типы не следуют этому примеру, однако они преследуют иные цели проектирования.

Основные отличия перечислены ниже:

  • Реализация: Интерфейс содержит только объявления, тогда как абстракцияtracТ-класс может обеспечить как АБС, так и АБС.tract участников и полностью внедренные методы.
  • Множественное наследование: Класс может реализовывать множество интерфейсов, но может наследовать только один из них.tracкласс Т.
  • Район: Ан абсtracКласс `t` может хранить поля, конструкторы и свойства с данными, тогда как интерфейс не может хранить состояние экземпляра.
  • Модификаторы доступа: AbstracЧлены класса могут быть публичными, защищенными или приватными, в то время как члены классического интерфейса по умолчанию являются публичными.
  • Случай использования: Используйте интерфейс для добавления возможностей между несвязанными типами, а также абстракцию.tracКласс t позволяет использовать общий код для тесно связанных типов.

Короче говоря, интерфейс описывает, что может делать класс, а абстракцияtracКласс t также может определять часть того, как это делается.

Как реализовать несколько интерфейсов в C#

В отличие от наследования классов, C# позволяет одному классу реализовывать более одного интерфейса. Именно так язык предлагает безопасную форму множественного наследования без неоднозначности, возникающей при одновременном наследовании нескольких базовых классов.

Для реализации нескольких интерфейсов их следует перечислить после имени класса, разделяя каждый запятой. Затем класс должен определить каждый метод, объявленный в каждом реализуемом им интерфейсе.

Шаг 1) Объявите два интерфейса, каждый со своим методом.

Шаг 2) Создайте класс, реализующий оба интерфейса, разделяя имена интерфейсов запятой.

Шаг 3) Для каждого члена, объявленного в каждом интерфейсе, необходимо предоставить тело метода.

В приведенном ниже примере показан класс Document, который реализует как интерфейс I.Readable и интерфейс IWritable.

using System;
namespace DemoApplication
{
 interface IReadable
 {
  void Read();
 }
 interface IWritable
 {
  void Write();
 }
 class Document : IReadable, IWritable
 {
  public void Read()
  {
   Console.WriteLine("Reading the document");
  }
  public void Write()
  {
   Console.WriteLine("Writing to the document");
  }
  static void Main(string[] args)
  {
   Document doc = new Document();
   doc.Read();
   doc.Write();
   Console.ReadKey();
  }
 }
}

Code Объяснение:-

  1. Мы объявляем два интерфейса, IReadable и IWritable. Каждый интерфейс объявляет один метод без тела.
  2. Класс Document перечисляет оба интерфейса после двоеточия, разделяя их запятой, чтобы обеспечить совместимость с обоими интерфейсами.tracц.
  3. Затем в классе определяются методы Read и Write. Пропуститьping Любой из этих методов приведет к ошибке компиляции.
  4. Метод Main создает объект Document и вызывает оба метода, доказывая, что класс удовлетворяет двум интерфейсам.

При запуске программа выводит сообщение на экран. Чтение документа на первой линии и Запись в документ на второй строке. Этот шаблон сохраняет каждый элемент.tracНебольшой и сфокусированный класс Document упрощает тестирование и расширение.

Преимущества использования интерфейсов в C#

Интерфейсы широко используются в профессиональных проектах на C#, поскольку они делают код гибким и упрощают его сопровождение. Они позволяют программировать в соответствии с определенными условиями.tracа не к конкретному классу.

К основным достоинствам можно отнести:

  • Слабая связь: Code Зависит от интерфейса, а не от конкретного класса, поэтому реализация может изменяться без нарушения работы вызывающих функций.
  • Множественное наследование: Класс может наследовать поведение от нескольких интерфейсов, чего не допускает обычное наследование классов.
  • Тестируемость: Интерфейсы упрощают замену реального класса на фиктивный объект во время модульного тестирования.
  • Внедрение зависимости: Фреймворки внедряют реализацию интерфейса во время выполнения, что является ключевой идеей принципов SOLID.
  • Консистенция: Каждый реализующий класс обязан предоставлять один и тот же набор членов, что обеспечивает предсказуемость API.

Благодаря этим преимуществам интерфейсы лежат в основе большинства современных шаблонов проектирования и фреймворков приложений в C#.

Часто задаваемые вопросы (FAQ)

По общепринятой практике, имя интерфейса в C# начинается с заглавной буквы I, например, IDisposable или I.ReadableПрефикс I мгновенно указывает на то, что тип является интерфейсом, а не классом или структурой.

До C# 8.0 интерфейс содержал только объявления. Начиная с C# 8.0, методы интерфейса по умолчанию позволяют интерфейсу предоставлять тело метода, поэтому старые реализации продолжают работать при добавлении новых членов.

При явной реализации имя члена интерфейса указывается с помощью его префикса, например, I.Readable.Чтение. В этом случае член класса может быть вызван только через ссылку на интерфейс, что позволяет избежать конфликтов имен, когда два интерфейса объявляют один и тот же метод.

Да. Интерфейс может наследовать один или несколько других интерфейсов. Класс, реализующий дочерний интерфейс, должен определить каждый метод как из дочернего интерфейса, так и из всех унаследованных родительских интерфейсов.

Нет. Интерфейс нельзя создать напрямую, потому что у него нет реализации. Вы создаёте объект класса, который реализует этот интерфейс, а затем ссылаетесь на этот объект через тип интерфейса.

Да. Члены классического интерфейса по умолчанию являются публичными, и к ним нельзя добавлять модификаторы доступа. Класс, реализующий интерфейс, также должен объявить соответствующие члены публичными.

Да. GitHub Copilot может создавать шаблоны интерфейса, предлагать сигнатуры его методов и генерировать класс, реализующий этот интерфейс, на основе короткого комментария или имени интерфейса, что ускоряет процесс.tracРазработка с использованием подхода t-first.

ML.NET использует такие интерфейсы, как ITransformer и IDataView, для определения своего конвейера машинного обучения. Разработка кода с использованием этих интерфейсов требует...tracts позволяет менять модели и источники данных без переписывания окружающего кода обучения.

Подведем итог этой публикации следующим образом: