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:
- Konstanty
- Operátory
- Statický konstruktor.
- Vnořené typy
- Statická pole, metody, vlastnosti, indexery a události
- Deklarace členů pomocí explicitní syntaxe implementace rozhraní.
- Explicitní modifikátory přístupu (výchozí přístup je
public).
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