Недавно я узнал, что С# позволяет
Интерфейс может наследовать один или несколько базовых интерфейсов.
Например, IScreen
в Caliburn.Micro делает это в http://caliburnmicro.codeplex.com/SourceControl/latest#src/Caliburn.Micro/IScreen.cs
namespace Caliburn.Micro
{
public interface IScreen : IHaveDisplayName, IActivate, IDeactivate,
IGuardClose, INotifyPropertyChangedEx
{
}
}
Я понимаю, почему это полезно, так как это означает, что для класса, реализующего IScreen
, также необходимо реализовать другие интерфейсы.
Но мне интересно, как С# обрабатывает этот компилятор и время выполнения.
Небольшой фон/контекст этого вопроса:
Я пришел из фона, где интерфейсы определяют таблицу методов, а классы, реализующие интерфейсы, имеют как свою таблицу методов, так и указатели на таблицы методов интерфейсов, которые они реализуют.
Вспомогательные вопросы, закручивающие мой мозг из разных обсуждений наследования нескольких классов, которые я имел с людьми в прошлом, о которых я думаю, применимы и к этому случаю:
- Если интерфейс может наследовать от нескольких базовых интерфейсов, как будет выглядеть порядок методов в этой таблице?
- Что делать, если эти интерфейсы имеют общих предков: будут ли эти методы появляться несколько раз в таблице?
- Что делать, если у этих интерфейсов есть разные предки, но похожие имена методов?
(Я использую здесь методы слов, подразумевая, что свойство, определенное в интерфейсе, будет иметь метод get_ или set_).
Любое понимание этого очень ценится, а также советы о том, как лучше формулировать этот вопрос.