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

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

  • Интерфейс похож на чистый абстрактный класс, который содержит только абстрактные методы
  • Детский класс должен обеспечить реализацию для всех методов родительского интерфейса
  • Однако объект интерфейса не может быть создан, ссылка на объект интерфейса может быть создана
  • Все методы в интерфейсе являются общедоступными и абстрактными по умолчанию
  • Ссылка на объект родительского интерфейса может указывать на объект дочернего класса
  • В списке Inheritance родителям класса должны следовать родители интерфейса
  • Члены интерфейса:
    • методы
    • свойства
    • индексаторах
    • Мероприятия
  • Интерфейс не может содержать:
    • Константы
    • поля
    • операторы
    • Конструкторы
    • деструкторы
  • Все члены интерфейса являются общедоступными
  • Интерфейс может наследовать другой интерфейс
  • Интерфейс не может быть создан
  • Модификатор доступа не может быть указан для члена интерфейса

Пример:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
 
namespace InterfaceApplication
{
   public interface ITransactions
   {
      // interface members
      void showTransaction();
      double getAmount();
   }
   
   public class Transaction : ITransactions
   {
      private string tCode;
      private string date;
      private double amount;
      public Transaction()
      {
         tCode = " ";
         date = " ";
         amount = 0.0;
      }
      
      public Transaction(string c, string d, double a)
      {
         tCode = c;
         date = d;
         amount = a;
      }
      
      public double getAmount()
      {
         return amount;
      }
      
      public void showTransaction()
      {
         Console.WriteLine("Transaction: {0}", tCode);
         Console.WriteLine("Date: {0}", date);
         Console.WriteLine("Amount: {0}", getAmount());
      }
   }
   class Tester
   {
      static void Main(string[] args)
      {
         Transaction t1 = new Transaction("001", "2/5/2016", 28300.00);
         Transaction t2 = new Transaction("002", "2/5/2016", 152900.00);
         t1.showTransaction();
         t2.showTransaction();
         Console.ReadKey();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Transaction: 001
Date: 2/5/2016
Amount: 28300
Transaction: 002
Date: 2/5/2016
Amount: 152900

Интерфейс или абстрактный базовый класс?

При разработке иерархии классов вам часто приходится решать, должны ли классы в корневой иерархии (родительские классы) быть абстрактными базовыми классами, или
же реализовать конкретные классы в терминах интерфейсов.
Вот некоторые рекомендации, которые помогут принять это решение.

В пользу интерфейсов:

  1.  Будут ли классы внедрять несколько базовых классов? Это невозможно в C#, но возможно реализовать несколько интерфейсов.
  2. Разделяете ли вы озабоченность до того момента, когда вы понимаете разницу между тем, что ваш класс и что он делает? Интерфейсы часто связаны с тем, что
    делает класс, тогда как базовый класс может закрепить его.
  3.  Интерфейсы часто не зависят от класса и могут использоваться во многих ситуациях.
    Их можно добавить в класс, не заботясь о том, что это такое.
  4. Интерфейсы часто допускают очень слабо связанную конструкцию.
  5. Вывод слишком большого количества вещей из базового класса может привести к тому, что он будет раздуваться со слишком
    большой функциональностью.

В пользу базовых классов:

  1. Существует ли разумная общая функциональность или данные для всех производных типов? Может быть полезен абстрактный базовый класс.
  2. Реализация одного и того же интерфейса по многим типам может привести к многократному повторению кода, тогда как абстрактный базовый класс может группировать общий код в единую реализацию.
  3. Абстрактный базовый класс может обеспечить реализацию по умолчанию.
  4.  Абстрактные базовые классы имеют тенденцию жестко структурировать код. Это может быть желательно в некоторых случаях.

Понимание взаимосвязи между классами и интерфейсами

Класс расширяет другой класс, интерфейс расширяет другой интерфейс, но класс реализует интерфейс.

Источник: http://www.csharpstar.com/csharp-interface/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector