Помогни ни да направим Uroci.net по - богат! Добави урок
Категории Други уроци Adobe Photoshop Adobe Illustrator Adobe Flash Adobe Fireworks DreamWeaver CSS и HTML Corel Draw Image Ready PHP SEO CMS Microsoft Windows Microsoft Word Microsoft Excel PowerPoint Microsoft Access Microsoft Publisher Linux Visual basic
JavaScript Ajax 3ds Max Maya 3D C++ Sound Forge Gimp SWiSH

Класове и обекти

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



Финализиране, Приключване и колекция Garbage

Във VB .NET, събитието Terminate не съществува. Тук, за да разберем как става приключването и унищожаването, трябва да разгледаме колекция - garbage collection.

Когато колекторът за боклук (garbage collector) открие,че обектът вече не се ползва (примерно изпълняващата се програма не поддържа повече връзка с обекта), той автоматично стартира специален деструктивен метод (destructor method) наречен Finalize. Ние нямаме способ да определим кога garbage collector ще извика метод Finalize. Ние трябва да бъдем сигурни, че известно време след като не е осъществена връзка с обекта, той ще се финализира. Всяко закъснение означава,че.NET Framework ще използва така наречената колекция reference-tracing garbage collection, която периодично освобождава нереализираните ресурси. Finalize е защитен метод (Protected method). Може да бъде извикан от клас или произхождащ клас, но не и извън класа, включително и от клиента на класа. (Всъщност, понеже деструктора Finalize автоматично се извиква от боклукджийския колектор {garbage collector}, класът никога не би трябвало да вика собствения си метод Finalize директно.) Ето генералния синтаксис и формат на метод Finalize:

Overrides Protected Sub Finalize( )

' код за изчистване

MyBase.Finalize

End Sub

Ползата от колекцията garbage е, че прочиства ресурси без вмешателство на програмиста. Това си има и недостатъци. Не можем да унищожаваме обекти, точно в момента, когато нямаме нужда от тях. Трябва да отбележим, че не всички ресурси се управляват от общата езикова среда - Common Language Runtime. Windows обработките и връзките с бази данни не са субекти на колекцията garbage.

За да даде възможност за ръчно унищожаване на ресурси, библиотека Base Class Library дефинира втори деструктор, наречен Dispose. Синтаксисът и употребата му са илюстрирани в кода:

Class classname

Implements IDisposable

Public Sub Dispose( ) Implements IDisposable.Dispose

' код за изчистване

' ако е нужно викане на дъщерни обекти - Dispose methods

End Sub

' друг код за класа

End Class

Отбележете, че класовете, които поддържат този деструктор (който може да се вика) трябва да изпълняват IDisposable интерфейс-- оттук оператор Implements. IDisposable има само един член, методът Dispose. Необходимо е да се информира всеки клиент на класа, че трябва да вика този метод специфичен за реализиране на ресурси.

Можем да формулираме методи и свойства наследяващи от Garbage Collection namespace които да имат контрол над обектите на разпореждане. Пример за такъв код:



Imports System



' Dispose class.



Public Class DisposeMe

Inherits Object

Public Sub Dispose(objName as String)



'objName ще се получи от предишното използвайки

'ToString Public Instance Method и съхранявайки стойността в стринга.



Finalize

GC.SuppressFinalize(objName)

End Sub

Protected Overrides Sub Finalize()



'не е нужен clean-up code; Finalize ще стартира



End Sub

End Class

С този пример може успешно да контролирате ръчното приключване на обекти и ресурси..com

Абстрактният клас (abstract class) може да бъде дефиниран като клас скелет (skeleton) в който няма код--само декларации за използване от произхождащите класове, чиято структура ще съдържа този скелет. С други думи костите и мускулите ще се добавят по-късно.

Примерно нека имаме абстрактния клас elrctro_uchitel:

Abstract class electro_uchitel



Private Electrotechnika_prepodava As Integer

Electrotechnika_prepodava = 1

Public Property prepodava () As Integer

Get

Return Electrotechnika_prepodava

End Get

End Property

End Class

Public class Silnotokov_uchitel

Inherits electro_uchitel

Public Property moge_da_prepodava() as String

If prepodava = 1 Then

'тук е кода,който дава сведение, че силнотоков специалист може да преподава Електротехника!

End If

End Property

End Class

Използвайки абстрактния клас electro_uchitel, ние поставяме изискването класа Silnotokov_uchitel да каже Silnotokov_uchitel може ли да преподава Електротехника. Това може после да се използва и за друг клас, Slabotokov_uchitel, който може да използва Electrotechnika_prepodava за организация на разпределението на часовете в дадено професионално училище.

 


Страници: «1 2 3

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


© Всички права запазени. 2006-2008. Created by: Site.bg
Препоръчваме: IT Новини | Кино и игри | Диплома.бг | Paparak.bg | Тунинг Портал | uchenik.com | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | AnimeS-bg.com | Фото Форум | Запознанства | Мрежа от приятели | IT Light | Spodeli.net | Фото-Култ | IDG.BG | Teenproblem.net | Блог - Образование | Fresh-BG.com | Hanovete.com | Bulfleet.com | Mythlands.com | Ohoboho.com | Казанлък.Com | News24 | Setcom.bg | Atol.bg | Elmaz.com | MobileBulgaria.com