Что такое интерфейс в 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
Интерфейс или абстрактный базовый класс?
При разработке иерархии классов вам часто приходится решать, должны ли классы в корневой иерархии (родительские классы) быть абстрактными базовыми классами, или
же реализовать конкретные классы в терминах интерфейсов.
Вот некоторые рекомендации, которые помогут принять это решение.
В пользу интерфейсов:
- Будут ли классы внедрять несколько базовых классов? Это невозможно в C#, но возможно реализовать несколько интерфейсов.
- Разделяете ли вы озабоченность до того момента, когда вы понимаете разницу между тем, что ваш класс и что он делает? Интерфейсы часто связаны с тем, что
делает класс, тогда как базовый класс может закрепить его. - Интерфейсы часто не зависят от класса и могут использоваться во многих ситуациях.
Их можно добавить в класс, не заботясь о том, что это такое. - Интерфейсы часто допускают очень слабо связанную конструкцию.
- Вывод слишком большого количества вещей из базового класса может привести к тому, что он будет раздуваться со слишком
большой функциональностью.
В пользу базовых классов:
- Существует ли разумная общая функциональность или данные для всех производных типов? Может быть полезен абстрактный базовый класс.
- Реализация одного и того же интерфейса по многим типам может привести к многократному повторению кода, тогда как абстрактный базовый класс может группировать общий код в единую реализацию.
- Абстрактный базовый класс может обеспечить реализацию по умолчанию.
- Абстрактные базовые классы имеют тенденцию жестко структурировать код. Это может быть желательно в некоторых случаях.
Понимание взаимосвязи между классами и интерфейсами
Класс расширяет другой класс, интерфейс расширяет другой интерфейс, но класс реализует интерфейс.

