C # Внутренний против друга VS
-
04-10-2019 - |
Вопрос
На этот вопрос: Что такое C # эквивалент друга?, Я бы лично ответил «внутреннее», как JA сделал среди ответов! Тем не менее, Джон Скелет говорит, что нет прямой эквивалентности друзей VB в C #. Если Jon Skeet так говорит, я не буду тем, кто говорил иначе! ;П
Мне интересно, как ключевое слово внутренний (C #) не быть эквивалентным Друг (Vbnet), когда их соответствующие определения:
То Друг (Visual Basic) Ключевое слово в заявлении декларации указывает, что элементы могут быть доступны из одной и той же сборки, но не из-за пределов сборки. [...
Внутренний: Доступ ограничен текущей сборкой.
Для моего понимания эти определения значат совсем так же для меня.
Затем, соответственно, когда я кодирую в VB.NET, я использую Друг Ключевое слово, чтобы указать, что класс или свойство должны быть доступны только внутри сборки, где он объявлен. То же самое в C #, я использую внутренний Ключевое слово, чтобы указать то же самое.
Я делаю что-то или что-то не так с этой точки зрения?
Какие уточнения я не получаю?
Может кто-нибудь, пожалуйста, объясните, как или в каком другом и внутренних не являются прямыми эквивалентами?
Заранее спасибо за любой из ваших ответов!
Решение
Я сказал, что нет прямого эквивалента C ++ Концепция «друга». Это не то же самое, что VB.Net Friend
концепция, которая действительно эквивалентна internal
в C #.
Контекст важен - не думайте, что то же самое слово означает точно так же на всех языках ... "Static" - это классический пример :)
Другие советы
Ответ Джона (оригинал) позволяет понять, что он ссылается на C / C ++ friend
Ключевое слово, которое предоставляет частный доступ к другому классу. Нет прямого эквивалента в C #, но есть способ расширить internal
на другую сборку, в значительной степени для тестирования.
Насколько я понимаю, vb.net Friend
такой же, как C # internal
.
(Я написал выше, так как Джон добавил здесь ответ.)
При сравнении .NET Языки VB's friend
приравнивается к C # internal
. Отказ Значение, все, что помечено как таковое, может быть доступна только из того же проекта / сборки. Это можно комбинировать с protected
для большего контроля над видимостью.
То InternalsVisibleTo
атрибут может быть полезен для целей тестирования; Несмотря на имя, это относится к VB столько, сколько делает с C #. Следует отметить, что VB не поддерживал использование InternalsVisibleTo
до .NET 4.
Существует грубый эквивалент ключевого слова C ++ в управляемом коде. Хотя это работает на уровне сборки, а не на уровне класса. Вы можете использовать [InternalsVisibleTo]
атрибут.