Інтерфейс

1. Інтерфейс формує взаємодію між класами через публічні члени класу

2. Клас, що реалізують інтерфейс, повинен реалізувати члени інтерфейсу

3. Інтерфейси встановлюють спільні правила взаємодії для різних класів

4. Один клас може реалізовувати багато інтерфейсів, на відміну від абстрактного класу

5. У визначенні інтерфейсу не можна реалізовувати методи чи вказувати модифікатори доступу

6. Не можна створювати об'єкти інтерфейсу

7. Інтерфейс може включати методи і властивості, але не змінні

8. Усі методи інтерфейсу є абстрактними і публічними

9. Інтерфейс не може мати конструктора

Покласти різні класи в один список

var cars = new List<ICar>();

car.Add(new BMW());

car.Add(new Porsche());

foreach (var car in cars) 

// (BMW(car)). - може бути, якщо цей об'єкт був бехою

}

interface IWorker  { 

     void SetWorker(string name, int year); 

     string GetWorker(); 

}

class Worker : IWorker {

     string workerName;

     int workerYear;

     public void SetWorker(string name, int year) {

          workerName = name;

          workerYear = year;

     }

     public string GetWorker() {

          return workerYear + " " + workerYear;

     }

}

Якщо клас Worker успадковується іншим класом, то інтерфейс IWorker теж успадковується

Інтерфейс може обмежити доступ до функцій класу, які не описані в інтерфейсі (upcast):

IWorker w1 = new Worker();    

Console.WriteLine(w1.Do());    // Не працює, функція стала приватною

Використовувати ієрархію інтерфейсів може бути зручно, коли потрібно розширити функціональність певного інтерфейсу без порушення вже існуючого коду.

public interface A { 

     int Sum(); 

}

public interface B : A { 

     int Minus(); 

class MyOperation : B { 

     int x = 10, y = 5; 

     public int Sum() { return x + y; } 

     public int Minus() { return x - y; } 

}

Якщо два інтерфейси реалізують функцію Sum() 

class MyMath : Interface1, Interface2  {

Наслідування класу та інтерфейсів:

class BMW : Car, IWorker, IDriver, IRobot {

}