Я реорганизую базу кода проекта, в которой я сейчас работаю, чтобы классы/интерфейсы, которые не полезны вне пределов сборки, должны быть объявлены как внутренние (а не публичные). Но у меня возникла проблема со следующим кодом:
internal interface IFirstInterface
{
...
}
internal interface ISecondInterface
{
IFirstInterface First{ get; }
...
}
public class Implementer : ISecondInterface
{
public IFirstInterface First {get; private set;}
...
}
Мои вопросы:
-
Почему члены внутренних интерфейсов должны публично реализовываться? Если вы реализуете интерфейс во внутреннем классе, не должны ли реализованные члены быть внутренними? Это не большая проблема, так как члены интерфейса не будут общедоступными в любом случае, учитывая, что класс является внутренним. Это просто кажется интуитивным.
-
Основная проблема связана со сценарием выше, поскольку я не могу иметь публичный getter для IFirstInterface, поскольку он предположительно является внутренним интерфейсом, то есть я получаю следующую ошибку от компилятора:
Непоследовательная доступность: свойство тип "IFirstInterface" меньше доступный, чем собственность 'Implementer.First'
Есть ли способ обойти это?
Примечание. Я понимаю, что в этом упражнении рефакторинга, вероятно, мало значения, но я подумал, что было бы хорошим способом для меня глубже понять последствия внутреннего модификатора.