SkillsTest.pl C# pytania i zadania rekrutacyjne Klasa implementuje kilka interfejsów z metodami o takich samych nazwach. W jaki sposób zaimplementowałbyś metody w danej klasie?

: 2017-09-24 | Nr 20 z 51

Pytanie

Klasa implementuje kilka interfejsów z metodami o takich samych nazwach. W jaki sposób zaimplementowałbyś metody w danej klasie? C#

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...

Polecamy

Na co możesz wydać swoje 15k?

Zabawki dla dwulatka