внутренний против общественного В c#
Я хочу знать разницу между public
и internal
модификаторы видимости.
когда мы должны использовать internal
на класс и когда public
? Я смущен, когда метод должен быть public
или internal
.
Я читал, что internal
можно получить доступ через сборку, в то время как public
может также использоваться через сборку, где разница лежит.
6 ответов:
public
видно откуда угодно.
internal
виден только внутри сборкивы, как правило, используете внутренний только для защиты внутренних API. Например, вы можете выставить несколько перегрузок метода:
public int Add(int x, int y) public int Add(int x,int y, int z)
оба из которых вызывают внутренний метод
internal int Add(int[] numbers)
вы можете поставить много сложности на метод, но "защитить" его с помощью фасадных методов, которые могут помочь программисту правильно вызвать метод. (Этот метод реализации с параметром массива может иметь произвольный предел значений, например.)
также стоит отметить, что с помощью отражения, любые и все методы вызываются независимо от их видимости. Еще один " хак " для управления/получения доступа к внутренне скрытым API.
internal
полезно, когда вы хотите объявить член или тип внутри DLL, а не вне этого...
обычно, когда вы объявляете член какPublic
вы можете получить доступ к этому из других библиотек. но, если вам нужно было объявить что-то публичным только внутри вашей библиотеки классов, вы можете объявить его какInternal
.
в формальном определении: внутренние элементы видны только внутри текущей сборки...
internal
также полезно при написании модульных тестов. ЭлементInternalsVisibleTo
атрибут пусть ваша тестовая сборка обращается к внутренним методам в вашей сборке кода. Т. е. вы можете проверить методы, которые кажутся частными для внешнего мира без использования отражения.
публика также может быть доступна за пределами сборки. Поэтому, когда у вас есть класс, который не должен быть доступен, каждый класс в сборке должен иметь доступ к нему, тогда internal-это правильная вещь. Если вам нужен внешний доступ, пользоваться общественным.