Друг против публики для форм vb.net - PullRequest
3 голосов
/ 19 января 2010

В vb.net лучше использовать дружеские или общедоступные формы? Каковы преимущества каждого?

Я замечаю, что когда вы импортируете проект vb6, формы приходят в друзья, но когда вы добавляете новую форму в vb.net, она общедоступна. Я не видел никакой разницы в том, как они работают, поэтому я должен что-то упустить.

Ответы [ 3 ]

7 голосов
/ 19 января 2010

По моему мнению, я бы использовал Friend (он же internal в C #), хотя по умолчанию это public. Я также использовал бы private для элементов управления в форме, хотя я думаю, что VB по умолчанию защищен. В общем, думайте о доступе типа / члена, как если бы это были сиськи вашей жены. Держите их скрытыми от других, если только нет какой-либо выгоды разоблачать их (например, получить ускоренный билет или создать общую библиотеку общих диалогов и т.

Одним из недостатков создания внутренних вещей является то, что вам нужно проделать дополнительную работу, чтобы сделать их доступными для ваших модульных тестов. Подробнее см. InternalsVisibleToAttribute .

4 голосов
/ 19 января 2010

VB6 не поддерживает экспорт форм из библиотеки классов. Поэтому естественным отображением для преобразованного кода является Friend. Однако у VB.NET таких проблем нет. Использование Public - это нормально, если предположить, что все открытые типы в аргументах открытых методов также являются Public. Легко найти, компилятор скажет вам.

3 голосов
/ 19 января 2010

Если форма Public, к ней можно получить доступ из-за пределов текущей сборки (.exe). Если это Friend, то он доступен только из сборки. Те же правила уровня доступа применяются к Forms, как и другие классы VB.NET.

Я не могу вспомнить общую ситуацию с Winforms, когда вам понадобятся публичные формы, потому что они обычно находятся в одной сборке, что делает друга достаточно хорошим. Если у вас не было форм, разбросанных по разным сборкам, и они должны были ссылаться друг на друга.

Возможно, команда Microsoft, написавшая инструмент импорта, выбрала Friend, потому что все формы были взяты из одного и того же классического проекта, тогда как команда Visual Studio (New Item) выбрала Public, потому что .NET больше работает с модульными проектами. Это может быть так просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...