C # внутренний VS VBNET Друг - PullRequest
17 голосов
/ 07 мая 2010

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

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

Друг VBNET

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

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

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

Насколько я понимаю, эти определения значат для меня одно и то же.

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

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

  2. Какие уточнения я не получаю?

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

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

Ответы [ 4 ]

24 голосов
/ 07 мая 2010

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

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

4 голосов
/ 07 мая 2010

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

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

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

3 голосов
/ 07 мая 2010

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

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

2 голосов
/ 07 мая 2010

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

...