Скажите, у меня есть три интерфейса:
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 ?
Я знаю, что это может сделанная использующая явная реализация, но я не могу назвать их.:(
Если вы используете явную реализацию, вы должны привести объект к интерфейсу, метод которого вы хотите вызвать:
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
Вы можете вызвать его. Вы просто должны использовать ссылку с интерфейсом типа:
I1 abc = new ABC();
abc.XYZ();
Если у вас есть:
ABC abc = new ABC();
вы можете сделать:
I1 abcI1 = abc;
abcI1.XYZ();
или:
((I1)abc).XYZ();