interface (Referenční dokumentace jazyka C#)

Rozhraní definuje kontrakt. Jakýkoli class nebo struct , který implementuje daný kontrakt, musí poskytnout implementaci členů definovaných v rozhraní. Počínaje jazykem C# 8,0 může rozhraní definovat výchozí implementaci pro členy. Může také definovat členy, aby static poskytovaly jednu implementaci pro běžné funkce.

V následujícím příkladu musí třída ImplementationClass implementovat metodu s názvem SampleMethod, která nemá žádné parametry a vrací void.

Další informace a příklady naleznete v tématu rozhraní.

Ukázkové rozhraní

interface ISampleInterface
{
    void SampleMethod();
}

class ImplementationClass : ISampleInterface
{
    // Explicit interface member implementation:
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }

    static void Main()
    {
        // Declare an interface instance.
        ISampleInterface obj = new ImplementationClass();

        // Call the member.
        obj.SampleMethod();
    }
}

Rozhraní může být členem oboru názvů nebo třídy. Deklarace rozhraní může obsahovat deklarace (signatury bez implementace) následujících členů:

Předchozí deklarace členů obvykle neobsahují tělo. Počínaje jazykem C# 8,0 může člen rozhraní deklarovat tělo. Tato metoda se nazývá Výchozí implementace. Členové s orgány umožňují, aby rozhraní poskytovalo "výchozí" implementaci pro třídy a struktury, které neposkytují přepisující implementaci. Kromě toho, počínaje C# 8,0, může rozhraní zahrnovat:

Rozhraní nemůžou obsahovat stav instance. Zatímco statická pole jsou nyní povolena, pole instance nejsou v rozhraních povolena. Automatické vlastnosti instance nejsou v rozhraních podporované, protože by implicitně deklarovaly skryté pole. Toto pravidlo má jemný efekt pro deklarace vlastností. V deklaraci rozhraní následující kód nedeklaruje automaticky implementovanou vlastnost, která je v class nebo struct . Místo toho deklaruje vlastnost, která nemá výchozí implementaci, ale musí být implementována v jakémkoli typu, který implementuje rozhraní:

public interface INamed
{
  public string Name {get; set;}
}

Rozhraní může dědit z jednoho nebo více základních rozhraní. Když rozhraní přepisuje metodu implementovanou v základním rozhraní, musí použít explicitní syntaxi implementace rozhraní .

Jestliže seznam základních typů obsahuje základní třídu a rozhraní, musí se základní třída nacházet v seznamu jako první.

Třída, která implementuje rozhraní, může explicitně implementovat členy rozhraní. Explicitně implementovaný člen není přístupný prostřednictvím instance třídy, ale pouze prostřednictvím instance rozhraní. Kromě toho mohou být k výchozím členům rozhraní přicházet pouze prostřednictvím instance rozhraní.

Další informace o explicitní implementaci rozhraní naleznete v tématu explicitní implementace rozhraní.

Příklad implementace rozhraní

Následující příklad ukazuje implementaci rozhraní. V tomto příkladu obsahuje rozhraní deklaraci vlastnosti a třída obsahuje implementaci. Jakákoli instance třídy, která implementuje rozhraní IPoint, má celočíselné vlastnosti x a y.

interface IPoint
{
   // Property signatures:
   int X
   {
      get;
      set;
   }

   int Y
   {
      get;
      set;
   }

   double Distance
   {
       get;
   }
}

class Point : IPoint
{
   // Constructor:
   public Point(int x, int y)
   {
      X = x;
      Y = y;
   }

   // Property implementation:
   public int X { get; set; }

   public int Y { get; set; }

   // Property implementation
   public double Distance =>
      Math.Sqrt(X * X + Y * Y);

}

class MainClass
{
   static void PrintPoint(IPoint p)
   {
      Console.WriteLine("x={0}, y={1}", p.X, p.Y);
   }

   static void Main()
   {
      IPoint p = new Point(2, 3);
      Console.Write("My Point: ");
      PrintPoint(p);
   }
}
// Output: My Point: x=2, y=3

specifikace jazyka C#

Další informace naleznete v části rozhraní specifikace jazyka C# a specifikace funkce pro výchozí členy rozhraní – C# 8,0

Viz také