Ну, допустим, что вы хотите, класс будет доступен только внутри своей собственной сборки:
internal class Test
Давайте предположим, что у вас есть два класса, один внутри другого (вложенных классов):
protected internal class TestA
{
private TestB _testB;
private class TestB
{
}
public TestA()
{
_testB = new TestB();
}
}
Класс TestB
может быть доступен только внутри методов/свойств/конструкторов внутри TestA или внутри себя.
То же самое относится к модификатору protected
.
// Примечание
Если вы не указываете модификатор доступа, по умолчанию он будет private
, так на моем примере следующая строка:
private TestB _testB;
равно
TestB _testB;
То же относится и к классу.
Специальные Модификатор
Тогда есть protected internal
, которая соединяет оба модификатора, так что вы можете получить доступ только тот класс, внутри одной и той же сборки ИЛИ из класса, который является производным от этого одного, даже если он ISN» t в той же сборке.Пример:
Ассамблея 1:
public class TestA : TestB
{
public TestB GetBase()
{
return (TestB)this;
}
public int GetA1()
{
return this.a1;
}
}
protected internal class TestB
{
public int a1 = 0;
}
Программа
TestA _testA = new TestA(); // OK
TestB _testB = new TestB(); // ERROR
int debugA = new TestA().a1 // ERROR
int debugB = new TestA().GetA1(); // OK
TestB testB_ = new TestA().GetBase(); // ERROR
Источник
Link (Access Modifiers)
Тип или элемент может быть доступен любым кодом в той же сборке, , но не из другого узла.
Тип или элемент может быть доступны только с помощью кода в том же классе или структуры.
Тип или элемент может быть доступны только с помощью кода в том же классе или структуры, или в классе, который является производным от этого класса.
Тип или элемент может быть доступна любой другой код в том же сборки или другую сборку, которая ссылается на нее.
Вы должны прочитать об пространствах имен. – dotctor
Если вы хотите ограничить площадь вашего публичного API, это одна из причин. Подумайте об инкапсуляции, и что это значит ... Вы действительно хотите, чтобы ваши потребители видели внутренние детали реализации, если им никогда не нужно их трогать? Что относительно частных вложенных классов, которые используются в контексте одного класса ... Etc – Charleh
У вас может быть большой класс и внутри 'private class'. Затем вы можете создать экземпляр его в окружающем классе, но не извне. Возможно, этот внутренний класс настолько специфичен, что его нельзя использовать повторно в другом месте. –