Tema: Re: Visual studio 5 ir modaline forma
Autorius: Jornada Del Muerto
Data: 2010-10-22 15:53:58
Instance tai kazkokio tipo sukurtas objektas, pvz.: DataTable yra tipas, tipas gali buti klase, struktura, ar primityvus tipas pvz int ir t.t.. tai yra tipas, o sio tipo sukurtas objektas yra to tipo object instance, arba tiesiog to tipo instance, pvz.:

Daleiskim tu susikurei savo open file dialog klase, ja uzvadinai "ManoFileOpenDialogas" <- kitaip sakant sukurei ManoFileOpenDialogas tipa.

' Deklaruojam
Dim a As ManoFileOpenDialogas ' nurodai kad kintamasis a bus ManoFileOpenDialogas tipo

' kintamajame a sukuriu (kiti dar vadina inicializuoju) ManoFileOpenDialogas tipo object instance 
a = new ManoFileOpenDialogas ' va a ir bus instance (dar kiti vadintu objektu, zodziu kaip nepavadinsi taip nepagadinsi)

    Siaip terminologijos ipac tokios bazines OOP vertetu pasimokinti, ok toliaujam keliau :)  tau ka is esmes norejo pasakyti zmones, kad .NET yra toks dalykas kaip GC (Garbage Collector) grubiai vertus, siuksliu rinkejas, pvz. kokiam nors C++ viska alokuota rankiniu budu atminti skirta kazkokiam programos darbui, po to reikedavo nepamirsti atlaisvinti - kitaip ji uzimdavo ir toliau vieta ir su laiku prisikaupdavo tos rezervuotos/alokuotos atminties daug, nuo ko galedavo luzti programa, .net atvejais tam buna ivairus metodai dispose ir pan.. Bet .NET daugeli tokiu objektu pasalina pats GC pagalba, del to greiciausia su tavuoju objektu taspats atsitinka, tiesiog reik suprasti kokiom aplinkybem .net pats juos naikina.
    
    Visumoje .net automatu, kaip jau ir minejau naikina objektus kurie niekur nera saugomi ar isiminti, pvz kazkokiam kintamajame ir panasiai, pvz. turime funkcija:

Public Sub ManoFunkcija

    Dim a As ManoFileOpenDialogas ' 
    a = new ManoFileOpenDialogas

    ' dirbi su a
    a.DoModal() ' ir t.t...

End Sub

    Isejus is sios funkcijos a bus automatiskai naikinamas, bet sekanti karta iskvietus sia funkcija (tiksliau metoda) objektas sukuriamas bus is naujo, taip va ir turetu buti daroma, paprastai atmintyje niekas nelaiko inicializuotu OpenFileDialog'u, aplamai kuo maziau laikysi tokio nereikalingo saugoti slamsto tuo tavo programa maziau resursu valgys, o jeigu nori ji saugotis del to kad naudosi labai daznai (nebent) tai saugokis toje klaseje kuri su juo dirbs, tada butu kazkas tokio:

' Klases, bet ne metodo/funkcijos zonoje deklaruotas kintamasis
public OpenFile As ManoFileOpenDialogas = Null ' Nepamenu gerai VB.NET sintakses, paskutini kart reikejo pries 5 metus

Public Sub ManoFunkcija

    If Me.OpenFile = Null Then ' rodos VB kitaip tikrinasi ar objektas null
        Me.OpenFile = new ManoFileOpenDialogas
    End If

    ' kreipiesi i savo dialoga
    Me.DoModal() ' ir t.t...

End Sub

Tada 1 karta bus sukuriamas dialogas ir veliau pernaudojamas ji nekuriant dar karta, tuo paciu jis saugomas bus klaseje kuri ji naudoja, siaip tai geriausia savo kodo parasytum, tai tada butu aiskiau kas negerai, gal beda visai kitur.


Freelancer Developer [R&D]
http://www.lythum.lt

Naujausias research: http://wiki.lythum.lt/index.php?title=Facebook_integrafimo_galimyb%C4%97s


"Valdas" <valdonas@super.lt> wrote in message news:i9rr3e$cre$1@trimpas.omnitel.net...
> na as kazko nesuprantu, siaip as ant Visual Basic darau, tai kas tas 
> instance nezinau :((
> 
> "Andrius F" <andriusflMORESPAM@gmail.com> wrote in message 
> news:i9rq8p$bic$1@trimpas.omnitel.net...
>> kiekviena karta pries ShowDialog() kurk nauja instance..
>> using(var form = new SomeForm())
>> {
>>    if(form.ShowDialog(this) == DialogResult.Ok)
>>    {
>>        ...
>>    }
>> }
>>
>> "Valdas" <valdonas@super.lt> wrote in message 
>> news:i9rf9u$qk9$1@trimpas.omnitel.net...
>>> ka reiskia nereusint instance, tai kaip tada naudotis tuo ShowDialog ? 
>>> man reikalingas tas modaliskumas, nes darau savo open file dialoga, ir 
>>> kai uzdarau forma, tik tuomet gaunu reiksme...
>>>
>>> "fakeID" <fakeID@fakeHost.com> wrote in message 
>>> news:i9rcss$n3d$1@trimpas.omnitel.net...
>>>> Nereiktu reusinti formos instance, nebent tau tikrai taip reikia (pvz 
>>>> forma kuriasi 15 sek, bet tada turbut kazkas blogai su tavo forma ;)..
>>>> Blogiausiu atveju isitikink, kad GarbageCollector nesunaikins tavo 
>>>> formos:
>>>>    a. ikisk instance i static field
>>>>    b. galbut verta overridint close, ir hidint forma vietoj base.close()
>>>>
>>>> bet siaip - nereusink instance. tai bloga architektura
>>>>
>>>> "Valdas" <valdonas@super.lt> wrote in message 
>>>> news:i9r6gd$er1$1@trimpas.omnitel.net...
>>>>> Sveiki, iskilo tokia beda, bandant is vienos formos atidaryti kita 
>>>>> "Forrm2.ShowDialog()", pradzioje atidaro, bet programai padirbus kokia 
>>>>> valanda ir vel bandant atidaryti, meta klaida 
>>>>> "ObjectDisposedException", gal nujauciat kur cia beda ?
>>>>>
>>>>> aciu
>>>>>
>>>>>
>>>
>>> 
> 
>