Gdy klasa implementuje interfejsy, których składowe mają metody o takich samych sygnaturach powinniśmy jawnie zaimplementować metodę dla każdego z implementowanych interfejsów.
Jako przykład posłuży nieco przesadzony przypadek, jednak dzięki temu łatwiej będzie oddać sedno problemu.
Załóżmy, że klasa Manager implementuje dwa poniższe interfejsy:
public interface IBook
{
void Read();
}
public interface IFile
{
void Read();
}
public class Manager : IBook, IFile
{
void Read()
{
Console.WriteLine("ReadMethod...")'
}
}
IBook bookManager = new Manager();
IFile fileManager = new Manager();
bookManager.Read() // output: ReadMethod...
fileManager.Read() // output: ReadMethod...
Interfejsy IBook oraz IFIle oczekują dwóch różnych implementacji metody Read(). Sposób odczytu pliku jest różny od sposobu odczytu książki.
Problem ten rozwiązać można jawnie implementując daną metodę:
public interface IBook
{
void Read();
}
public interface IFile
{
void Read();
}
public class Manager : IBook, IFile
{
void IBook.Read()
{
Console.WriteLine("Read book...")'
}
void IFile.Read()
{
Console.WriteLine("Read file...")'
}
}
IBook bookManager = new Manager();
IFile fileManager = new Manager();
bookManager.Read() // output: Read book...
fileManager.Read() // output: Read file...
Można jeszcze nieco zmodyfikować przykład drugi, tworząc tylko jeden obiekt "manager":
IBook manager = new Manager();
manager.Read(); // output: Read book...
((IFile)manager).Read(); // output: Read file...
Korzystając z serwisu akceptujesz regulamin
oraz politykę prywatności.
Używamy informacji zapisanych za pomocą plików cookies w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu.
Jeśli nie wyrażasz zgody, ustawienia dotyczące plików cookies możesz zmienić w swojej przeglądarce.
Gdy klasa implementuje interfejsy, których składowe mają metody o takich samych sygnaturach powinniśmy jawnie zaimplementować metodę dla każdego z implementowanych interfejsów.
Jako przykład posłuży nieco przesadzony przypadek, jednak dzięki temu łatwiej będzie oddać sedno problemu.
Załóżmy, że klasa Manager implementuje dwa poniższe interfejsy:
Interfejsy IBook oraz IFIle oczekują dwóch różnych implementacji metody Read(). Sposób odczytu pliku jest różny od sposobu odczytu książki.
Problem ten rozwiązać można jawnie implementując daną metodę: