Jawne implementacji interfejsu (Podręcznik programowania C#)
Jeśli klasy implementuje dwa interfejsy, które zawierają element członkowski z tej samej sygnaturze, a następnie wykonywania tego członka w sprawie klasy spowoduje, że oba interfejsy użyć tego członka jako ich realizacji.W poniższym przykładzie, wszystkie połączenia do Paint wywołania tej samej metody.
class Test
{
static void Main()
{
SampleClass sc = new SampleClass();
IControl ctrl = (IControl)sc;
ISurface srfc = (ISurface)sc;
// The following lines all call the same method.
sc.Paint();
ctrl.Paint();
srfc.Paint();
}
}
interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
class SampleClass : IControl, ISurface
{
// Both ISurface.Paint and IControl.Paint call this method.
public void Paint()
{
Console.WriteLine("Paint method in SampleClass");
}
}
// Output:
// Paint method in SampleClass
// Paint method in SampleClass
// Paint method in SampleClass
Jeśli dwa interfejsu członków nie należy wykonywać tę samą funkcję, jednak może to prowadzić do nieprawidłowego wdrożenia jedną lub obie z interfejsów.Można jawnie jest zaimplementowany członek interfejsu — utworzyć element członkowski klasy, która jest wywoływana tylko za pośrednictwem interfejsu i specyficzne dla tego interfejsu.W tym celu nazewnictwa członek klasy z nazwą interfejsu i kropkę.Na przykład:
public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}
Członek klasy IControl.Paint są dostępne tylko w IControl interfejs, i ISurface.Paint są dostępne tylko w ISurface.Zarówno implementacje metod są niezależne, a żadna nie jest dostępny bezpośrednio na klasie.Na przykład:
// Call the Paint methods from Main.
SampleClass obj = new SampleClass();
//obj.Paint(); // Compiler error.
IControl c = (IControl)obj;
c.Paint(); // Calls IControl.Paint on SampleClass.
ISurface s = (ISurface)obj;
s.Paint(); // Calls ISurface.Paint on SampleClass.
// Output:
// IControl.Paint
// ISurface.Paint
Jawnych implementacji umożliwia również rozwiązać przypadków gdzie dwa interfejsy zadeklarować różnych członków o tej samej nazwie, takie jak właściwości i metody:
interface ILeft
{
int P { get;}
}
interface IRight
{
int P();
}
Aby zaimplementować obu interfejsach, klasa musi używać jawnych implementacji dla P właściwość lub metoda P lub, aby uniknąć błędów kompilatora.Na przykład:
class Middle : ILeft, IRight
{
public int P() { return 0; }
int ILeft.P { get { return 0; } }
}
Zobacz też
Informacje
Klasy i strukturach (Podręcznik programowania C#)
Interfejsy (Podręcznik programowania C#)
Dziedziczenie (Podręcznik programowania C#)