C# внутренний VS Друг VBNET

К этому ТАК вопрос: Что C# эквивалентен из друга?, я лично ответил бы "внутренний", точно так же, как Ja сделал среди ответов! Однако Jon Skeet говорит, что нет никакой прямой эквивалентности Друга VB в C#. Если Jon Skeet скажет так, то я не буду тем, говорящим иначе!; P

Я задаюсь вопросом, как может ключевое слово, внутреннее (C#) не быть эквивалентом Друга (VBNET), когда их соответствующие определения:

Друг VBNET

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

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

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

К моему пониманию эти определения значат вполне то же для меня.

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

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

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

  3. Кто-то мог бы объяснить, как или в том, какой Друг и внутренний не является прямыми эквивалентностями?

Заранее спасибо за любой из Ваших ответов!

18
задан Community 23 May 2017 в 11:47
поделиться

4 ответа

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

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

27
ответ дан 30 November 2019 в 07:17
поделиться

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

2
ответ дан 30 November 2019 в 07:17
поделиться

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

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

4
ответ дан 30 November 2019 в 07:17
поделиться

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

Насколько я понимаю, в VB.Net Friend - это то же самое, что в C# internal.

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

.
5
ответ дан 30 November 2019 в 07:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: