Обзор частичных классов в Visual Basic .NET

Частичные классы - это особенность VB.NET, которая используется почти везде, но об этом мало что пишут. Это может быть из-за того, что пока не так много очевидных приложений для разработчиков. Основное использование заключается в создании решений ASP.NET и VB.NET в Visual Studio, где это одна из тех функций, которые обычно «скрыты».

Частичный класс - это просто определение класса, которое разделено на несколько физических файлов. Частичные классы не имеют значения для компилятора, потому что все файлы, которые составляют класс, просто объединяются в один объект для компилятора. Поскольку классы просто объединяются и компилируются, вы не можете смешивать языки. То есть у вас не может быть одного частичного класса в C # и другого в VB. Вы также не можете охватить сборки частичными классами. Все они должны быть в одной сборке.

Это часто используется самой Visual Studio, особенно на веб-страницах, где это является ключевым понятием в файлах «кода позади». Мы увидим, как это работает в Visual Studio, но понимание того, что изменилось в Visual Studio 2005, когда он был представлен, является хорошей отправной точкой.

instagram viewer

В Visual Studio 2003 «скрытый» код для приложения Windows находился в разделе «Регион», помеченном как «Код, сгенерированный конструктором форм Windows». Но все это было в одном файле, и было легко просматривать и изменять код в Регионе. Все кода доступен для вашего приложения в .NET. Но так как это часть кода, который вы должны никогда не связывайтесь с ним, он хранился в этом скрытом регионе. (Регионы все еще можно использовать для собственного кода, но Visual Studio их больше не использует.)

В Visual Studio 2005 (Framework 2.0) Microsoft сделала примерно то же самое, но они скрыли код в другом месте: частичный класс в отдельном файле. Вы можете увидеть это в нижней части иллюстрации ниже:


Нажмите здесь, чтобы отобразить иллюстрацию
Нажмите кнопку «Назад» в вашем браузере, чтобы вернуться

Одно из синтаксических различий между Visual Basic и C # сейчас заключается в том, что C # требует, чтобы все частичные классы должны быть квалифицированы с ключевым словом частичный но VB нет. Ваша основная форма в VB.NET не имеет специальных классификаторов. Но оператор класса по умолчанию для пустого приложения Windows выглядит следующим образом с использованием C #:

открытый частичный класс Form1: Form

Выбор дизайна Microsoft для таких вещей интересен. Когда Пол Вик, дизайнер Microsoft VB, написал об этом выборе дизайна в своем блоге Panopticon CentralДебаты об этом в комментариях продолжались для страниц и страниц.

Давайте посмотрим, как все это работает с реальным кодом на следующей странице.

На предыдущей странице была объяснена концепция частичных классов. Мы конвертируем один класс в два частичных класса на этой странице.

Вот пример класса с одним методом и одним свойством в проекте VB.NET

 Открытый класс CombinedClass. Private m_Property1 As String. Public Sub New (ByVal Value As String) m_Property1 = Значение. End Sub. Public Sub Method1 () MessageBox. Show (m_Property1) End Sub. Свойство Property1 () As String. Получить. Вернуть m_Property1. Конец Get. Set (ByVal value As String) m_Property1 = значение. Конец Set. Конечная недвижимость. Конечный класс 

Этот класс можно вызвать (например, в коде события Click для объекта Button) с помощью кода:

Dim ClassInstance As New _. CombinedClass («О частичных классах Visual Basic») ClassInstance. Method1 ()

Мы можем разделить свойства и методы класса на разные физические файлы, добавив в проект два новых файла класса. Назовите первый физический файл Partial.methods.vb и назови второй Partial.properties.vb. Физические имена файлов должны быть разными, но частичные имена классов будут одинаковыми, чтобы Visual Basic мог объединить их при компиляции кода.

Это не требование синтаксиса, но большинство программистов следуют примеру в Visual Studio использования «точечных» имен для этих классов. Например, Visual Studio использует имя по умолчанию Form1.Designer.vb для частичного класса для формы Windows. Не забудьте добавить ключевое слово Partial для каждого класса и изменить внутреннее имя класса (не имя файла) на то же имя. Я использовал внутреннее имя класса: PartialClass.

На рисунке ниже показан весь код для примера и код в действии.


Нажмите здесь, чтобы отобразить иллюстрацию
Нажмите кнопку «Назад» в вашем браузере, чтобы вернуться

Visual Studio «скрывает» частичные классы, такие как Form1.Designer.vb. На следующей странице мы узнаем, как это сделать с помощью только что созданных частичных классов.

Предыдущие страницы объясняют концепцию частичных классов и показывают, как их кодировать. Но Microsoft использует еще один прием с частичными классами, сгенерированными Visual Studio. Одной из причин их использования является отделение логики приложения от кода пользовательского интерфейса. В большом проекте эти два типа кода могут даже создаваться разными командами. Если они находятся в разных файлах, их можно создавать и обновлять с большей гибкостью. Но Microsoft делает еще один шаг и скрывает частичный код в Solution Explorer. Предположим, мы хотели скрыть методы и свойства частичных классов в этом проекте? Есть способ, но он неочевиден, и Microsoft не скажет вам, как это сделать.

Одна из причин, по которой вы не видите использования частичных классов, рекомендованных Microsoft, заключается в том, что они пока не очень хорошо поддерживаются в Visual Studio. Например, чтобы скрыть только что созданные классы Partial.methods.vb и Partial.properties.vb, необходимо изменить vbproj файл. Это файл XML, который даже не отображается в обозревателе решений. Вы можете найти его в Windows Explorer вместе с другими вашими файлами. Файл vbproj показан на рисунке ниже.


Нажмите здесь, чтобы отобразить иллюстрацию
Нажмите кнопку «Назад» в вашем браузере, чтобы вернуться

Мы собираемся сделать это, добавив полностью пустой «корневой» класс (остались только заголовок класса и инструкция End Class) и сделав оба наших частичных класса зависимыми от него. Так что добавьте еще один класс с именем PartialClassRoot.vb и снова измените внутреннее имя на PartialClass, чтобы соответствовать первым двум. На этот раз у меня есть не использовал ключевое слово Partial, чтобы соответствовать способу Visual Studio.

Здесь немного пригодится знание XML. Поскольку этот файл нужно будет обновить вручную, вы должны правильно настроить синтаксис XML. Вы можете редактировать файл в любом текстовом редакторе ASCII - Блокнот работает просто отлично - или в редакторе XML. Оказывается, у вас есть отличный вариант в Visual Studio, и это показано на рисунке ниже. Но вы не можете редактировать файл vbproj одновременно с редактированием проекта, в котором он находится. Поэтому закройте проект и откройте только файл vbproj. Вы должны увидеть файл, отображаемый в окне редактирования, как показано на рисунке ниже.

(Обратите внимание Compile элементы для каждого класса. DependentUpon Подэлементы должны быть добавлены в точности так, как показано на рисунке ниже. Эта иллюстрация была создана в VB 2005, но также была протестирована в VB 2008.)


Нажмите здесь, чтобы отобразить иллюстрацию
Нажмите кнопку «Назад» в вашем браузере, чтобы вернуться

Для многих из нас, вероятно, достаточно знать, что есть частичные классы, просто чтобы мы знали, что это такое, когда мы пытаемся отследить ошибку в будущем. Для разработки больших и сложных систем они могут стать маленьким чудом, потому что они могут помочь организовать код так, как раньше было невозможно. (У вас также могут быть частичные структуры и частичные интерфейсы!) Но некоторые люди пришли к выводу, что Microsoft изобрела их только по внутренним причинам - чтобы их генерация кода работала лучше. Автор Пол Киммель даже зашел так далеко, что предположил, что Microsoft фактически создала частичные классы, чтобы снизить их стоимость, упрощая аутсорсинг разработки по всему миру.

Может быть. Это то, что они могут сделать.

instagram story viewer