Подтвердить что ты не робот

С# внутренний VS VBNET Friend

К этому вопросу SO: Что такое эквивалент С# для друга?, я лично ответил бы "внутренний", точно так же, как Я сделал среди ответов! Тем не менее, Джон Скит говорит, что нет прямой эквивалентности VB Friend в С#. Если Джон Скит говорит так, я не буду говорить иначе!; Р

Мне интересно, как ключевое слово internal (С#) не будет эквивалентом Друг (VBNET), когда их соответствующие определения:

Друг VBNET

Ключевое слово Friend (Visual Basic) в заявлении декларации указывает, что элементы могут быть доступны из одной сборки, но не из вне сборки. [...]

внутренний С#

Внутренний: доступ ограничен текущей сборкой.

Насколько я понимаю, эти определения для меня совершенно одинаковы.

Затем, соответственно, когда я кодирую в VB.NET, я использую ключевое слово Friend, чтобы указать, что класс или свойство должны быть доступны только внутри сборки, где она объявлена. То же самое в С#, я использую внутреннее ключевое слово, чтобы указать то же самое.

  • Я делаю что-то или что-то не так с этой точки зрения?

  • Каковы уточнения, которые я не получаю?

  • Может кто-нибудь объяснить, как или в чем Друг и внутренние не являются прямыми эквивалентами?

Заранее благодарю за любой ваш ответ!

4b9b3361

Ответ 1

Я не сказал, что нет прямого эквивалента концепции С++. Это не то же самое, что концепция VB.NET Friend, которая действительно эквивалентна internal в С#.

Контекст важен - не предполагайте, что одно и то же слово означает одно и то же на всех языках... "static" - классический пример:)

Ответ 2

Джон (оригинальный) ответ дает понять, что он ссылается на ключевое слово C/С++ friend, которое предоставляет частный доступ другому классу. В С# нет прямого эквивалента, но есть способ расширить internal на другую сборку, в основном для тестирования.

Насколько я понимаю, VB.Net friend совпадает с С# internal.

(Я написал выше, как только Джон добавил здесь ответ).

Ответ 3

При сравнении языков .NET VB friend соответствует С# internal. Смысл, все, что помечено как таковое, можно получить только из одного и того же проекта/сборки. Его можно комбинировать с protected для большего контроля над видимостью.

Атрибут InternalsVisibleTo может быть полезен для целей тестирования; несмотря на название, он относится к VB так же, как и к С#. Следует отметить, что VB не поддерживал использование InternalsVisibleTo до .NET 4.

Ответ 4

В управляемом коде есть приблизительный эквивалент ключевого слова С++ friend. Хотя он работает на уровне сборки, а не на уровне класса. Вы можете использовать атрибут [InternalsVisibleTo].