Помогни ни да направим Uroci.net по - богат! Добави урок

Пространства от имена - Namespaces

bubust   трудност:    видян: 6633

- Пространства от имена в .NET Framework

Пространството от имена (namespace) e логическо групиране на типове за целите на идентификацията. Представете си, че имаме училище, където директорът е с име Ivan Petrov, учителят по математика е с име Ivan Petrov и пазачът е с име Ivan Petrov.

В този случай името Ivan Petrov е объркващо. Ако касиерът зад бюрото плати възнаграждението, което се полага на директора не на него, а на пазача, пазачът ще е доволен, но директорът едва ли. За да разреши това объркване с имена, училището може просто да дефинира три пространства с имена, наречени: Principals (директори), Uchitel (учители), и Custodial (охранители). Сега вече и трите личности могат да фигурират с пълните си имена без да стават грешки:

· Principals.Ivan Petrov

· Uchitel.Ivan Petrov

· Custodial.Ivan Petrov

Библиотека .NET Framework Class Library (FCL), съдържа няколко хиляди класа и други типове (като интерфейси {interfaces}, структури {structures}, и броячи {enumerations}) които са разделени на над 90 пространства за имена (namespaces). Тези пространства с имена провеждат обслужвания като:

· Основни и нови типове данни и обработващото изключенията (системно пространство с имена -System namespace)

· Достъп до данни -Data access (системно пространство за имена на данни - System.Data namespace)

· Елементи на потребителския интерфейс за стандартни Windows апликации (системно пространство за имена на форми -System. Windows. Forms namespace)

· Елементи на потребителския интерфейс за web апликации (System.Web.UI namespace)

Фактически самият език VB .NET е изпълнен като множество от класове, принадлежащи на пространството за имена - Microsoft.VisualBasic namespace. (Езиците C# и JScript са също изпълнени като множество от класове в кореспондиращи пространства за имена.)

Namespaces (пространствата от имена) не са задължително уникални за библиотека Framework Class Library; вие можете също да създадете собствено пространство за имена използвайки инструкция Namespace в началото на файла код.

Пространство за имена (namespace) е просто начин да организираме обектите в асемблитата. Когато имаме много обекти, namespace може да улесни достъпа, защото е организирано в йерархична структура, и свързаните обекти се групират под едно и също разклонение - node.

Примерно искаме да направим модел на Работилница за Учебна практика по електроника с нейните обекти, свойства и методи. Можем да създадем пространство от имена Elementi (namespace). След това можем да създадем подпространства от имена (subnamespaces). Примерно може да се работи с елементи транзистори - Transistors и елементи диоди - Diodi като две главни категории. Вътре в категория transistors може да работите с биполярни - Bipolar, униполярни PN - fieldPN, униполярни MOS - fieldMOS. Може да имате namespace наречено Elementi.Transistors. Bipolar, и в това пространство от имена ще намерите класовете и методите необходими за боравене с биполярни транзистори (Bipolar). Къде съществуват физически класовете няма значение за вас; те всички може да са в едно голямо асембли, но логически са разделени в тези различни namespaces.

Ако искате да използвате обектите в асемблито без напълно да ги квалифицирате по всяко време, използвайте инструкция Imports. Това ви позволява да използвате името на обекта без пълна квалификация на йерархията в пространството от имена.

Това означава, че следния код е правилен:

Dim x as Button

ако сме използвали оператор Imports System.WinForms:

Без него реда трябва да изглежда така:

Dim x as System.WinForms.Button

Всъщност, MsgBox която толкова обичаме може да се замести с System.WinForms.MessageBox class. MsgBox още работи за съвместимост, но е част от пространството за имена Microsoft.VisualBasic.Interaction, което съдържа редица методи и апроксимирани функции от предишната версия на VB.

Много елементи на езика са част от runtime, защото по този начин имат достъп до общата функционалност. Това означава, че може да отидем в C# и да имаме кутия за съобщения (message box), само чрез импортиране на System.WinForms и извикване на класа MessageBox class. MessageBox е доста мощен-- методът Show има например дванадесет вариации.

· Създаване на ваше собствено пространство от имена

Вие сте свободни да създадете свое собствено пространство от имена вътре във вашето асембли. Това става чрез вмъкване на свой блок Namespace...End Namespace. Вътре в namespace блока, може да имате структури, класове, броячи, интерфейси и други елементи.

Можете да именовате това namespace и то ще получава това, което се импортира в него. Вашият код може да изглежда така:

Namespace VocationalTraining

Public Class Customer

`тук код

End Class

Public Class Student

`тук код

End Class

End Namespace

Пространствата от имена могат да бъдат вложение едно в друго:

Namespace VocationalTraining

Namespace Customer

Class Training

...

End Class

Class Consulting

...

End Class

End Namespace

Namespace Student

...

End Namespace

End Namespace

Тук имате едно namespace, VocationalTraining, което съдържа две пространства (namespaces): Customer и Student. Пространството от имена VocationalTraining.Customer съдържа класове Training и Consulting, така че може да имате клиенти, които са използвали обучението и други, които са го консултирали. Ако не искате да създавате изрично пространство от имена, всички ваши класове и модули ще принадлежат на едно единствено пространство от имена , което се създава по подразбиране и е именовано като вашия проект. Може да видите това namespace, и да го промените ако искате, чрез кликване и визуализиране на диалогова кутия Project Properties във вашия проект. Текстова кутия Root Namespace представлява кореновото пространство от имена на вашия проект (root namespace). Ако декларирате namespace, вътре в проекта си, то ще се субординира с това root namespace. В нашия пример, ако кореновото пространство от имена на апликацията ни e Project1, то пълното пространство от имена за VocationalTraining ще бъде Project1. VocationalTraining

Друг пример е на апликация с форма, която има бутон, който като се кликне визуализира съобщителна кутия (message box). Част от генерирания от Windows Form Designer-код се изтрива, за освобождаване на място. Допълнително сме изтрили кореновото пространство от имена, спесифицирано в свойствата на апликацията:

Imports System.ComponentModel

Imports System.Drawing

Imports System.WinForms

4 Namespace opitNS.test.example

Public Class frmDemoNameSpace

Inherits System.WinForms.Form

Public Sub New()

MyBase.New()

frmDemoNameSpace = Me

'This call is required by the Win Form Designer.

InitializeComponent()

End Sub

'Form overrides dispose to clean up the component list.

Public Overrides Sub Dispose()

MyBase.Dispose()

components.Dispose()

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

msgbox("Button Pressed!!!")

End Sub

End Class

20 End Namespace

ww.syngress.com

С цел да наследим или импортираме тази форма, ние се нуждаем от префикс на формата с нейното namespace. Следващият пример показва форма, която наследява тази форма. Тази форма наследява всички класове на предишната форма (frmDemoNameSpace). Най-голямо практическо приложение имат редове 4 и 20.Те капсулират формата в пространство от имена (определено от програмиста):

Imports System.ComponentModel

Imports System.Drawing

Imports System.WinForms

Public Class inhForm

5 Inherits opitNS.test.example.frmDemoNameSpace

Public Sub New()

MyBase.New

inhForm = Me

'This call is required by the WinForm Designer.

InitializeComponent

End Sub

'Form overrides dispose to clean up the component list.

Overrides Public Sub Dispose()

MyBase.Dispose

components.Dispose

End Sub

End Class



В този пример можем да видим на ред 5, че тази форма наследява свойства от форма opitNS.test.example.frmDemoNameSpace .

Създаването на пространства от имена (namespaces) e особено полезно при унифициране на код ( повторно изпълнение на код -code reuse). Можете да осъществите функционалност между апликациите с минимални усилия, и много повече ефективност.

Ако дадена група функциии се съдържа в едно namespace, можете да импортирате това namespace и след това да имате достъп до цялата им функционалност. След като се импортира пространството от имена (namespace), можете да достигнете неговата функционалност директно. Няма нужда да се пишат префикси с името на пространството от имена.

Когато използвате команда Imports, ще ви се предостави списък от асемблита за избор, а вътре в асемблитата (assemblies), пространствата от имена (namespaces) са достъпни..syngress.com

Фигура 71 показва пространството от имена System.IO (както и други namespaces). Пространството от имена System.IO--което се съдържа в асембли mscorlib.dll--e едно от най-широко използваните пространства от имена и съдържа много функции. Както вече казахме повечето Visual Basic .NET апликации, които използват форми, разчитат на пространство System.Winforms. Фигура 3 показва изпълнението на това пространство с команда Imports.


- Разбиране на ключова дума Imports

Imports позволява на класа да използва namespace със съответна функционалност. Трябва да разположите инструкция Imports в началото на класа. Imports върви ръка за ръка с пространствата от имена.w.

Команда Imports е обща за апликациите на Visual Basic .NET, така че трябва да разберем как действа тя. Ето пример за използване на инструкция Imports:


Imports REGTOOL=Microsoft.Win32.Registry

Imports System.Drawing

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)


Dim img As Imaging.Metafile

' част от пространството от имена system.drawing namespace

img.Save("c:pic.wmf")

REGTOOL.CurrentUser.CreateSubKey("SomeKey")


End Sub

syngress.com



Фигура 71 Пространство от имена System.IO се импортира


В този пример, когато се натисне команден бутон button1, се създава подключ (subkey) в регистъра (registry) наречен SomeKey. www.syngress.com

Фигура 72 Импортиране на System.Winforms Namespace



















Пространството от имена Microsoft.Win32.Registry е импортирано и е псевдоним (alias) на REGTOOL. Това означава, че можем да използваме REGTOOL в апликацията. REGTOOL се пише по-лесно от Microsoft.Win32.Registry. Не можете да използвате същия псевдоним (alias) за повече от едно namespace вътре в класа. На ред 4 ще видите обект с префикс пространство от имена, защото иначе ще възникне конфликт. След като се импортира обекта, всички негови методи са достъпни без префикс с пространството от имена. Разбира се ако имате същото име на метод вътре в повече пространства от имена, тогава е задължително, за да не възникне конфликт. Можете да използвате инструкция Imports да добавяте пространства от имена от текущия проект. Когато работите в развойната среда Visual Basic .NET и извикате команда Imports, технологията на Microsoft - IntelliSense ще ви покаже достъпните namespaces от които може да селектирате. Ако пространството от имена, което търсите го няма в списъка, трябва да използвате диалогова кутия Add Reference (изберете Add Reference от меню Project).

Диалогова кутия Add Reference ви позволява да добавите връзка към други обекти.Тези връзки ще добавят пространства от имена към падащия списък, който използва команда Imports.



Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: IT Новини