Интерфейсы не определяют реализацию - они только определяют необходимые дополнительные интерфейсы.
Это означает, что любой класс, который реализует ITransaction
, также необходим для реализации IAuditable
. Это не означает, что ITransaction
также определяет свойства IAuditable
.
Следовательно, приведение чего-либо к ITransaction
не определяет, что оно имеет свойства IAuditable
. Это просто приведение к контракту, который гласит: «Я могу сделать все методы в ITransaction
». Тот факт, что все, что реализует ITransaction
, также требуется для реализации IAuditable
, не означает, что ITransaction
определяется иначе.
У Фила Хаака есть отличное сообщение в блоге об этом.
Если вы хотите, чтобы все свойства были унаследованы, вам следует использовать отношение «Is-A» (т.е. абстрактные классы), а не отношение «Can-do» (интерфейсы).