интерфейс

Интерфейс — это тип ссылки, который может только объявлять:
  • свойства
  • методы
  • индексаторы
  • события
Все члены интерфейса, по своей сути являются абстрактными.
По умолчанию, все члены интерфейса имеют модификатор public.
Класс, который реализует интерфейс, должен реализовать все члены, объявленные в интерфейсе.
Синтаксис:
[атрибут] модификатор interface имя_интерфеса : [имя_базового_интерфеса] {
 тип имя_метода (список параметров);
 //члены интерфейса
}

обычный интерфейс

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • public interface IResultShow {
  •  /*по умолчанию модификатор доступа у членов интерфейса
  •  public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/
  •  ushort ResultShow();
  • }
  •  
  • public interface ISum {
  •  /*по умолчанию модификатор доступа у членов интерфейса
  •  public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/
  •  decimal Sum();
  • }
  •  
  • //если класс реализует более одного интерфейса, то они указываются через запятую
  • public class Counter : IResultShow, ISum {
  •  ushort showStart;
  •  ushort showEnd;
  •  decimal price;
  •  public Counter(ushort arg0, ushort arg1, decimal arg2) {
  •   showStart = arg0;
  •   showEnd = arg1;
  •   price = arg2;
  •  }
  •  public ushort ResultShow() {
  •   return (ushort)(showEnd-showStart);
  •  }
  •  public decimal Sum() {
  •   return Math.Round((decimal)(ResultShow()*price), 2);
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   Console.WriteLine("оплата за электроэнергию\n");
  •   Console.Write("Введите начальные показания счетчика : ");
  •   ushort show_start = ushort.Parse(Console.ReadLine());
  •   Console.Write("Введите конечные показания счетчика  : ");
  •   ushort show_end = ushort.Parse(Console.ReadLine());
  •   Console.Write("Введите цену за 1 кВт/ч              : ");
  •   decimal price = decimal.Parse(Console.ReadLine());
  •   Counter C = new Counter(show_start, show_end, price);
  •   Console.WriteLine("Сумма за электроэнергию              : {0}", C.Sum());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
оплата за электроэнергию

Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84

явная реализация

Если в двух интерфейсах объявлены методы с одинаковыми именами и класс реализует эти интерфейсы, то обязательно понадобится явная реализация.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • public interface IA {
  •  void Message();
  • }
  •  
  • public interface IB {
  •  void Message();
  • }
  •  
  • //если класс реализует более одного интерфейса, то они указываются через запятую
  • class One : IA, IB {
  •  //явная реализация, указывается полное имя интерфейса, точка метод
  •  //ВНИМАНИЕ! при явной реализации модификаторы НЕ УКАЗЫВАЮТСЯ
  •  void IA.Message() {
  •   Console.WriteLine("Привет Мир!");
  •  }
  •  void IB.Message() {
  •   Console.WriteLine("Hello World!");
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   //ВНИМАНИЕ! через объект класса получить доступ к методам нельзя
  •   One O = new One();
  •   //создаем ссылку на интерфейс IA
  •   IA Aref = O;
  •   //доступ к методу с помощью ссылки
  •   Aref.Message();
  •   //создаем ссылку на интерфейс IB
  •   IB Bref = O;
  •   //доступ к методу с помощью ссылки
  •   Bref.Message();
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
Привет Мир!
Hello World!