Interfejs jest definiowany jako swojego rodzaju wzór, który wszystkie klasy implementujące muszą przestrzegać. Interfejs określa ’co’ powinno być zrobione a klasa dziedzicząca ’jak’ powinno to być zrobione.

Interfejs definiuje właściowości, metody, zdarzenia, które są składowymi tego interfejsu. Warto pamiętać, że interfejs zawiera jedynie deklaracje składowych, nie ich definicję!
Definicja jest rolą klasy, która dany interfejs implementuje. Zwykle pomaga to w utrzymaniu spójnej struktury, którą klasy dziedziczące muszą reprezentować.

Klasy abstakcyjne mogą w pewnym stopniu służyć temu samemu celowi, jednakże używane są głównie wtedy, gdy tylko kilka metod musi być zdeklarowanych w klasie bazowej a klasy pochodne implementują te metody.

Deklarowanie interfejsów

Interfejsy są deklarowane za pomocą słowa kluczowego interface. Deklaracja ta jest podobna do deklaracji klasy. Interfejsy domyślnie ustawiane są jako publiczne.
Deklaracja:
public interface INazwaInterfejsu
{
    // składowe interfejsu
    void WyswietlDane();
    double PoliczPensje();
}
Przykład:
using System;
namespace Interfejs
{
    class Program
    {
        static void Main(string[] args)
        {
            Transakcje t1 = new Transakcje("01", "25/11/2015", 331);
            Transakcje t2 = new Transakcje("02", "26/11/2015", 3321);
            t1.WyswietlDane();
            t2.WyswietlDane();
            Console.ReadKey();
            // Wynik działania programu
            //Kod: 01
            //Data: 25/11/2015
            //Ilosc: 331
            //Kod: 02
            //Data: 26/11/2015
            //Ilosc: 3321
        }
    }
    public interface ITransakcje
    {
        // składowe interfejsu
        void WyswietlDane();
        int PoliczIlosc();
    }
    public class Transakcje : ITransakcje
    {
        private string kod;
        private string data;
        private int ilosc;
        public Transakcje()
        {
            kod = "";
            data = "";
            ilosc = 0;
        }
        public Transakcje(string k, string d, int i)
        {
            kod = k;
            data = d;
            ilosc = i;
        }
        public int PoliczIlosc()
        {
            return ilosc;
        }
        public void WyswietlDane()
        {
            Console.WriteLine("Kod: {0}", kod);
            Console.WriteLine("Data: {0}", data);
            Console.WriteLine("Ilość: {0}", ilosc);
        }
    }
}