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

Променливи - (Variables)

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

Променливата може да се дефинира като отделна единица, която има следните шест свойства:



Name

Името на променливата се използва да се идентифицира променливата в кода. Във VB .NET, името на променливата може да стартира с Unicode алфабетен символ или като долна черта, и може да следва с други долни черти или символи с Unicode алфабетен характер, като букви, цифри, форматиращи или комбинирани символи.



Address

Всяка променлива има асоцииран адрес (address) в паметта, който представлява локацията в паметта, където е съхранена променливата. Забележете, че при много обстоятелства, адресът на променливата се променя през времето на нейния живот.



Type

Типът на променливата, наричан още тип данни (data type), определя възможните стойности, които тя може да приеме.



Value

Стойността на променливата е съдържанието й в локацията на паметта (на адреса в паметта).

Понякога се казва, че това е r-value (r-стойност) на променливата, реалната стойност от дясната страна на оператора за присвояване. Например кода:

Dim i As Integer

Dim j As Integer

i = 5

j = i

последния оператор може да бъде прочетен така "присвояваме стойност (value) i на клетка от паметта с адреса на j." От подобни съображения, адресът на променливата се нарича често нейна l- value (l-стойност).



Scope

Обсегът на дейстие на променливата се определя от това къде е видима в кода.



Lifetime

Времето на живот на променливата се определя от това кога и колко дълго отделната променлива съществува. Тя може да е видима или не, за даден период.



- Обсег на действие на променливите - (Variable Scope)



Променливите (и константите) имат обсег на действие (scope). Той дава индикация къде в програмата се разпознава променливата или така да се каже е видима (visible) от кода, тоест, къде тя може да се свърже с кода.

· Локални променливи (Local): на ниво блок (block-level) и на ниво процедура (procedure-level)

Ако променливата е декларирана вътре в блок код (code block - множество команди, завършващи с End..., Loop, или Next), тогава тя има диапазон на действие на ниво блок (block-level scope); това означава, че е видима само вътре в този блок.

Например следния код:

If x <> 0 Then

Dim rec As Integer

rec = 1/x

End If

MsgBox CStr(rec)

В този код, променливата rec не се разпознава извън блока, в който е дефинирана, така че финалната команда произвежда грешка. Интересно е да се отбележи, че времето на живот (lifetime) на променливата винаги е свързано с цялата процедура, даже и диапазона на действие да е блоков (block-level). Това означава, че ако блокът влезе в действие повече от веднаж, блоковата променлива ще продължи със стойността от предишния път, когато се е изпълнявал кода.

Променлива, декларирана с ключова дума Dim вътре в процедура на Visual Basic, но не вътре в блок, има област на действие на ниво процедура (procedure-level scope). Действието й е в процедурата, където е декларирана.



Променливи, които действатна ниво блок (block-level) и на ниво процедура (procedure-level)- се наричат ЛОКАЛНИ.



Предимството им е, че могат да се използват същите имена и другаде без конфликт, защото са видими само в своята процедура. Друго предимство е освобождаването на паметта, веднага, след като контрола напусне процедурата, което прави кода по-лесен за поддържане.

· Обсег на действие на ниво модул (Module-level) и на ниво проект (project-level)

Съществува разлика между начина по който се определя областта на действие на променливи декларирани в секцията за декларации (Declarations section) в стандартния модул и в клас - модула. Ще се ограничим тук до стандартния модул. Първо да отбележим, че самият стандартен модул трябва да бъде деклариран чрез модификатора Public, Friend, или Private по подразбиране (default). Тези декларации стриктно ограничават областта на действие. Така например, Public променлива, декларирана в модул, който е Friend има област на действие Friend.



1 Private достъп

Променлива, декларирана в декларационна секция (Declarations) на стандартен (standard) модул чрез модификатора за Private достъп има област на действие на ниво модул (module-level scope); видима е в целия модул, но никъде другаде. Използването на ключова дума Dim също дава на променливата област на действие на ниво модул, но нейното използване не е ясно и би следвало да бъде избягвано в интерес на четливостта.



2 Friend достъп

Променлива, декларирана в декларационна секция (Declarations) на стандартен (standard) модул чрез модификатора за Friend достъп е видима за целия проект и има област на действие на ниво проект (project-level scope). Не е видима в други проекти.



3 Public достъп

Променлива, декларирана в декларационна секция (Declarations) на Public стандартен (standard) модул чрез модификатора за Public достъп е видима за целия проект и също така във всички външни проекти, които имат връзка с проекта. Например декларираните модули в Project1:

Public Module Module1

Public iModulePublic As Integer

Friend iModuleFriend As Integer

End Module

Ако Project2 има връзка с Project1, тогава може да запишем:

Project1.Module1.iModulePublic = 100

Докато кодът:

Project1.Module1.iModuleFriend = 100

генерира синтактическа грешка "not accessible".



- Време на живот на променливите - (Variable Lifetime)



Променливите имат също време на живот (lifetime). Разликата между време на живот и обсег на действие е проста: времето на живот се определя от това кога, по време на изпълнение на програмата е валидна променливата; обсега на действие се определя от това къде в програмата, променливата се разпознава от кода (visible). За да илюстрираме разликите, да разгледаме следната процедура:

Sub ProcedureA( )

Dim LocalVar As Integer = 0

Call ProcedureB

LocalVar = 1

End Sub

Забележете LocalVar е локална променлива. Когато се изпълнява редът:

Call ProcedureB

изпълнението превключва към ProcedureB. Докато редът ProcedureB се изпълнява, променливата LocalVar e извън обхват, защото е локална за процедура ProcedureA. Но е още валидна, с други думи тя още съществува и има стойност. Тя просто не е достъпна за кода в процедура ProcedureB. Фактически, ProcedureB би могла да има променлива с име LocalVar, която няма да има нищо общо с тази в процедура ProcedureA.

След като свърши ProcedureB, изпълнението продължава в процедура ProcedureA с реда:

LocalVar = 1

който е валидна инструкция, защото променлива LocalVar отново е в обсег. Така че, времето на живот на променливата LocalVar се простира от момента когато е пусната процедура ProcedureA , до момента, когато свършва, включвайки периода, когато е действала процедура ProcedureB , защото тази процедура се вика от процедура А, макар че по това време променливата LocalVar е извън обсег.

Нека да споменем отново, че времето на живот на блокова променлива е времето на действие на процедурата, в която тази променлива е дефинирана.



Статични (Static) променливи

Видяхме, че променливата може да влиза и излиза от обсег по време на своя живот. Но когато свърши времето на живот на променливата, тя се разрушава и стойността й се губи. Времето на живот определя съществуването на променливата; обсегът й определя само видимостта.

Разгледайте следната процедура:

Sub ProcedureA( )

Call ProcedureB

Call ProcedureB

Call ProcedureB

Call ProcedureB

Call ProcedureB

End Sub

Sub ProcedureB( )

Dim x As Integer

x = 5

. . .

End Sub

Когато процедура ProcedureA се изпълнява, тя вика пет пъти процедура ProcedureB. Всеки път, когато се вика процедура ProcedureB, локалната променлива x се създава наново и се разрушава, когато свърши изпълнението на процедура B. Или, x се създава и разрушава пет пъти.

Нормално, това е точно каквото искаме. Ако искаме променливата да живее по-дълго, можем да я декларираме като статична.

Статичната променлива е локална променлива, чието време на живот е времето на цялата програма. Следният код на VB показва как може да се използва статична променлива:

Sub test( )

Static bFirstTime As Boolean = True

If bFirstTime Then

Debug.WriteLine("first time")

bFirstTime = False

Else

Debug.WriteLine("not first time")

End If

End Sub

Забележете, че можем да инициализираме статична променлива, вътре в декларацията на променливата. Ето илюстрацията:

Sub StaticTest( )

Static st As Boolean = True ' инициализиране на статична променлива

MsgBox(st)

st = False

End Sub

Private Sub button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles button1.Click

StaticTest( )

End Sub

Първият път, когато натиснем команден бутон - button1, StaticTest извежда съобщение True, защото статичната променлива st е инициализирана в True. След това, всеки път когато натиснем бутона, StaticTest връща False.



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


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com