|
|||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
|
Структури
Деякі вважають, що структури VB
.NET аналогічні призначеним для користувача типам колишніх версій VB або
багатьох інших мов програмування. Звичайно, структури VB .NET можуть використовуватися як
призначені для користувача типи, але цим сфера їх можливого застосування
не вичерпана. Структура може володіти всіма ознаками традиційного класу,
включаючи конструктори і члени з атрибутами Private/friend/public. Єдина
відмінність структур від звичайних об'єктів полягає в тому, що структури володіють
структурною семантикою. Пригадаєте, який сенс вкладається в цей термін:
Деякі
програмісти використовують структури частіше, ніж слідує, вважаючи, що структура
як1 полегшений
об'єкт працює ефективніше, ніж об'єкти звичайних класів. На
жаль, цей підхід не позбавлений недоліків: два об'єкти, що володіють однаковим
станом, далеко не завжди повинні вважатися за рівних, тоді як
при використанні структур це неминуче. Крім того, користувачі вашої коди
зазвичай чекають, що структури (і структурні типи взагалі) по своїй поведінці
близькі до вбудованих структурних типів ніби Integer і Double.
Визначення структур в програмі
Визначення
структури починається з модифікатора рівня доступу і ключового слова Structure: Public
Structure Nameofstructure ' Код структури
End Structure Для кожного члена
структури має бути вказаний модифікатор доступу (наприклад, Public або Private).
Поля, оголошені з ключовим словом Dim поза процедурами і функціями, вважаються за
відкриті. Нижче приведений простий варіант структури для роботи з комплексними
числами: Public Structure Complexnumber Private m_real As Double Private m_complex As Double Public Property
real () As Double Get Return m_real End Get Set(Byval
Value As Double) m_real = Value End Set End
Property Public Property
complex()As Double Get Return m_complex
End Get Set(Byval Value As Double) m_complex = Value End Set End
Property Public Sub New(Byval x As Double. Byval у As Double) real = x complex = у End
Sub Public Function
Add(Byval zl As Complexnumber) As Complexnumber Dim z As
Complexnumber z.real = Me.real
+ zl.real Z.complex =
Me.complex + zl.complex Return z End Function ' І так далі End
Structure Звернете увагу
на повернення структури функцією Add. До речі, поля структур не можуть
ініціалізуватися при оголошенні: Private m_real
As Double = 0 ' Помилка Між структурами і
посилальними об'єктами існує ще одна принципова відмінність: використання відкритих
полів замість властивостей Get-set в структурах широко поширене і не вважається
за прояв поганого стилю програмування, як для об'єктів. Це
пов'язано з тим, що поля екземплярів зазвичай відносяться до базових типів. Наприклад,
перевизначення приведеною вище структури
Complexnumber з відкритими полями Real і Imaginary не викличе особливих проблем. Структури
створюються викликом New або при привласненні значень їх полям. Звернення до полів
структур здійснюються так само, як і звернення до властивостей об'єктів. Нижче приведений
приклад використання структури Compl exnumber: Sub Main() Dim Z1 As New
Complexnumber(2.3. 2.4) Dim Z2.Z3 As
Complexnumber Z2.real = 1.3 Z2.complex =1.4 Z3 = Zl.Add(Z2) Console. Writeline(Z3.
real) Console.ReadLine() End
Sub
Структури можуть містити будь-які об'єкти VB .NET, зокрема інші структури,
перераховувані типи, масиви і так далі Таким чином, на VB .NET можна написати пакет для
роботи з матрицями, в якому основна структура даних визначатиметься таким
чином: Public
Structure Matrix Private Theoata(,)
As Double ' І так далі End
Structure
Простори імен для створюваних класів
Класи, перераховувані
типи, структури або модулі включаються в простори імен. Звичайно, створити
екземпляр модуля неможливо — тільки екземпляри класів, визначуваних в модулі.
У діалоговому вікні Project Properties, показаному на мал. 4.9, присутні текстові
поля для імені збірки і кореневого простору імен На мал. 4.9 вказаний
кореневий простір імен Apress. При оголошенні простору імен в
програмі можна використовувати ієрархію довільної глибини, що відображає логічну
структуру нашої програми. Розглянемо приклад визначення класу: Namespace Cornell.Morrison.VB.NET.CH4 Module
Module1 Sub Main() Console.filriteLine("test
code goes here") End Sub Public
Class"employeeexamplel ' Код класу
End Class End Module End
Namespace Мал.
4.9. Простір імен і
ім'я збірки у вікні властивостей проекту В цьому випадку
повне ім'я класу виглядає так: Apress.Cornell.Morrison.VB.NET.CH4.EmployeeExamplel
Тепер,
коли ви знаєте, як визначати власні класи, вам простіше працюватиме з вікном
класів, в якому члени класів вашого рішення відображаються у вигляді зручного
ієрархічного дерева. Вікно класів допомагає орієнтуватися в коді вашого рішення:
при подвійному клацанні в одному з рядків вікна класів у вікні програми автоматично
відкривається код відповідного члена. Вікно класів відкривається командою View
> Class View або комбінацією клавіш Ctrl+shift+c. На мал. 4.10 показано,
як виглядає вікно класів для однієї з версій нашого класу Employee. Мал.
4.10. Вікно класів
для класу Employee У лівому верхньому
кутку вікна розташована пара кнопок. Кнопка New Folder створює нову теку, але
частіше використовується кнопка Class View Sort By Type. Вона відкриває список, в якому
вибирається режим представлення інформації у вікні. |
|
|||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||