Если вы имеете в виду, что защищенные, как в используемой сборке, не могут использовать их напрямую, то да, если interface
и class
помечены internal
, то они не будут видны вне сборки.Подумайте об уровне доступа на интерфейсах и элементах как об отдельных блокировках, через которые можно пройти.
Если вы видите interface
на его уровне доступа, то вы можете сохранить ссылку на него, а затем, если выможно видеть свойства / методы на их уровнях доступа, затем вы можете вызывать / устанавливать / получать их.
Имейте в виду, однако, поскольку @phoog указывает, что protected internal
немного слабее, чем internal
.
Все это говорит о том, что если ваш класс internal
реализует интерфейс public
, и эти свойства также являются частью интерфейса public
, они могут быть видны ... Но это действительно становится неясным...
public interface IVisible
{
string VisibleProperty { get; set; }
}
internal class InvisibleClass : IVisible
{
public string VisibleProperty { get; set; }
}
В приведенном выше примере вы могли обращаться к классу InvisibleClass
через ссылку IVisible
в другой сборке , если , то вы могли бынайти способ создать или получить ссылку на него (например, если он был возвращен из метода фабрики в исходной сборке).
Все это в стороне, если ваш вопрос заключается в том, что вы хотите избежать их изучения через декомпилятор, рефлексию и т. Д., Это другой вопрос ...