К этому ТАК вопрос: Что C# эквивалентен из друга?, я лично ответил бы "внутренний", точно так же, как Ja сделал среди ответов! Однако Jon Skeet говорит, что нет никакой прямой эквивалентности Друга VB в C#. Если Jon Skeet скажет так, то я не буду тем, говорящим иначе!; P
Я задаюсь вопросом, как может ключевое слово, внутреннее (C#) не быть эквивалентом Друга (VBNET), когда их соответствующие определения:
Друг (Visual Basic), ключевое слово в операторе объявления указывает, что к элементам можно получить доступ из того же блока, но не снаружи блока. [...]
Внутренний: Доступ ограничен текущим блоком.
К моему пониманию эти определения значат вполне то же для меня.
Затем соответственно, когда я кодирую в VB.NET, я использую Друга ключевое слово, чтобы указать, что класс или свойство должны быть доступными только в рамках блока, где это объявляется. То же в C#, я использую внутреннее ключевое слово для определения того же.
Я делаю что-то или что-то не так с этой точки зрения?
Каковы улучшения, которые я не получаю?
Кто-то мог бы объяснить, как или в том, какой Друг и внутренний не является прямыми эквивалентностями?
Заранее спасибо за любой из Ваших ответов!
Я сказал, что не существует прямого эквивалента концепции C ++ «друг». Это не то же самое, что концепция VB.NET Friend
, которая действительно эквивалентна internal
в C #.
Контекст важен - не думайте, что одно и то же слово означает одно и то же во всех языках ... "статический" - классический пример :)
В управляемом коде существует примерный эквивалент ключевого слова friend из C++. Хотя оно работает на уровне сборки, а не на уровне класса. Вы можете использовать [InternalsVisibleTo]
атрибут
Если сравнивать языки .NET, то friend
в VB приравнивается к internal
в C#. Это означает, что доступ к чему-либо, помеченному как таковое, возможен только в пределах одного проекта/сборки. Его можно комбинировать с protected
для большего контроля над видимостью.
Атрибут InternalsVisibleTo
может быть полезен для целей тестирования; несмотря на название, он применим к VB в той же степени, что и к C#. Следует отметить, что VB не поддерживал использование InternalsVisibleTo
до .NET 4.
Из ответа Джона (оригинального) ясно, что он имеет в виду ключевое слово friend
языка C/C++, которое предоставляет частный доступ к другому классу. В C# нет прямого эквивалента, но есть способ расширить internal
на другую сборку, в основном для тестирования.
Насколько я понимаю, в VB.Net Friend
- это то же самое, что в C# internal
.
(Я написал выше, как раз когда Джон добавил ответ здесь)
.