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

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

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



Финализиране, Приключване и колекция 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

Сподели урока:



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


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