Класс, наследовавшийся нескольким Интерфейсам, имеющим ту же сигнатуру метода

Скажите, у меня есть три интерфейса:

public interface I1
{
    void XYZ();
}
public interface I2
{
    void XYZ();
}
public interface I3
{
    void XYZ();
}

Класс, наследовавшийся этим трем интерфейсам:

class ABC: I1,I2, I3
{
      // method definitions
}

Вопросы:

  • Если я реализую как это:

    класс ABC: I1, I2, I3 {

        public void XYZ()
        {
            MessageBox.Show("WOW");
        }
    

    }

Это компилирует хорошо и работает хорошо также! Это означает, что эта реализация отдельного метода достаточна для наследования всех трех Интерфейсов?

  • Как я могу реализовать метод всех трех интерфейсов и НАЗВАТЬ ИХ? Что-то вроде этого:

    ABC abc = new ABC();
    abc.XYZ(); // for I1 ?
    abc.XYZ(); // for I2 ?
    abc.XYZ(); // for I3 ?
    

Я знаю, что это может сделанная использующая явная реализация, но я не могу назвать их.:(

8
задан Péter Török 28 June 2010 в 15:29
поделиться

2 ответа

Если вы используете явную реализацию, вы должны привести объект к интерфейсу, метод которого вы хотите вызвать:

class ABC: I1,I2, I3
{
    void I1.XYZ() { /* .... */ }
    void I2.XYZ() { /* .... */ }
    void I3.XYZ() { /* .... */ }
}

ABC abc = new ABC();
((I1) abc).XYZ(); // calls the I1 version
((I2) abc).XYZ(); // calls the I2 version
8
ответ дан 5 December 2019 в 14:01
поделиться

Вы можете вызвать его. Вы просто должны использовать ссылку с интерфейсом типа:

I1 abc = new ABC();
abc.XYZ();

Если у вас есть:

ABC abc = new ABC();

вы можете сделать:

I1 abcI1 = abc;
abcI1.XYZ();

или:

((I1)abc).XYZ();
2
ответ дан 5 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: