Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Instancirani objekt u klasi u C# - nije mi jasno?

[es] :: .NET :: .NET Desktop razvoj :: Instancirani objekt u klasi u C# - nije mi jasno?

[ Pregleda: 2994 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zorrome

Član broj: 22587
Poruke: 198
*.cmu.carnet.hr.



Profil

icon Instancirani objekt u klasi u C# - nije mi jasno?03.06.2006. u 21:52 - pre 217 meseci
Može li mi netko objasniti kako je u tek deklariranoj klasi SiteManager moguće instancirati
objekt te klase (znači SiteManager, kod gdje su u komentaru upitnici).
Što bi to značilo - ukratko što je to, koja osobina objektno orjentiranih jezika itd.
Kod je pisan u C#

class SiteManager
{
SiteList sites = new SiteList();

public static void Main()
{
SiteManager mgr = new SiteManager(); // ????

mgr.sites = new SiteList();
// dalje kod nije bitan
}
}


////////////// ili /////////////////////
class CTest
{
CTest test = new CTest(); // ????
}


Hvala
 
Odgovor na temu

Oliver Klaćik
Vice President, Thunder Road Software
Inc.
Stara Pazova

Član broj: 34059
Poruke: 242
80.93.231.*

Sajt: www.thunderroadsoftware.c..


Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?04.06.2006. u 01:04 - pre 217 meseci
Pa, ne možeš instancirati klasu unutar te iste klase... Koja bi bila svrha toga, uopšte?

A objekat možeš instancirati prilikom deklaracije ili na nekom drugom mestu (obično u konstruktoru klase ili pre nego što treba da ga upotrebiš).

Objekte deklarišeš na nivou klase ili na nivou procedura (ili čak petlji), a kada su deklarisani možeš ih instancirati gde god hoćeš. Naravno, pre nego što počneš da koristiš te iste objekte...

Ako imaš problema sa osnovama OO programiranja, bolje je da pročitaš neku knjigu o tome. Uštedećeš i vreme i živce...


Oliver 'FAQ' Klaćik
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?04.06.2006. u 03:26 - pre 217 meseci
Citat:

Pa, ne možeš instancirati klasu unutar te iste klase... Koja bi bila svrha toga, uopšte?


Pa nije bas tako. Probaj da instanciras objekat tvoje klase u istoj klasi. Jedna od najcescih primena je Clone i Copy metoda. Tu se vraca kopiran objekat iste klase, tako da primena postoji. Isto tako postoji i potreba da se cuvaju i reference klase unutar iste klase. Klasican primer su linked list-e, samo sto cini mi se da je u C# upotrebom kolekcija i generics-a to sad nepotrebno raditi.
 
Odgovor na temu

Oliver Klaćik
Vice President, Thunder Road Software
Inc.
Stara Pazova

Član broj: 34059
Poruke: 242
80.93.231.*

Sajt: www.thunderroadsoftware.c..


Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?04.06.2006. u 12:22 - pre 217 meseci
Da, u pravu si, može... Da budem iskren, nikada nisam ni probao, jer nikada nisam imao potrebu za tim, tako da moj komentar u vezi svrhe svega toga stoji.

Ako si nepažljiv, lako se može dobiti StackOverflowException takvim pristupom.
Oliver 'FAQ' Klaćik
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?04.06.2006. u 12:51 - pre 217 meseci
Citat:
Oliver Klaćik: Da, u pravu si, može... Da budem iskren, nikada nisam ni probao, jer nikada nisam imao potrebu za tim, tako da moj komentar u vezi svrhe svega toga stoji.


Kao sto rekoh postoji potreba za tim i to u dosta slucajeva. Naci ces gomilu primera gde klasa vraca objekat iste. Razmisli malo, da nema potrebe za tim verovatno bi ogranicili taj slucaj pa bi dobio compile time error. Inace pogledaj overloading operatora i vedeces svrhu instaciranja objekta te klase u istoj.


Citat:

Ako si nepažljiv, lako se može dobiti StackOverflowException takvim pristupom.


Ako si nepazljiv izazvaces StackOverflowException onda i sa bilo kojom drugom klasom.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?04.06.2006. u 13:29 - pre 217 meseci
Citat:

////////////// ili /////////////////////
class CTest
{
CTest test = new CTest(); // ????
}


Hvala


Ovo mi je promaklo. Ovo sto si napiso nece nikad raditi. Za ovo bi mozda trebalo ubaciti da kompajler izbaci error. Glupo je da se u konstruktoru nalazi inicijalizacija objekta same klase jer ce se zakucati u beskonacnost. Ovo se nigde ne koristi, mozda za testiranje kompajlera (izgleda da je onda C# puko )
Postoji nekad primena kada se cuvaju reference iste klase kao u linked listama. Samo sto se tamo ne vrsi incijalizacija nego se dodeljuje referenca iz "spoljnog" koda.


 
Odgovor na temu

Oliver Klaćik
Vice President, Thunder Road Software
Inc.
Stara Pazova

Član broj: 34059
Poruke: 242
80.93.231.*

Sajt: www.thunderroadsoftware.c..


Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?05.06.2006. u 11:27 - pre 217 meseci
O tome sam sve vreme govorio...
Oliver 'FAQ' Klaćik
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?05.06.2006. u 11:54 - pre 217 meseci
Citat:
Oliver Klaćik: Pa, ne možeš instancirati klasu unutar te iste klase... Koja bi bila svrha toga, uopšte?


Samo da napomenem, instance field instanciranje je invalid (kao sto primetiste, vodi ka StackOverflow), ali static field instanciranje je sasvim validno i izmedju ostalog cini osnovu Singleton patterna.

Code:

class CTest
{
    public static CTest instance = new CTest(); 

    private CTest(): {}
}

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?05.06.2006. u 14:35 - pre 217 meseci
Citat:
zorrome: Može li mi netko objasniti kako je u tek deklariranoj klasi SiteManager moguće instancirati objekt te klase (znači SiteManager, kod gdje su u komentaru upitnici).
Što bi to značilo - ukratko što je to, koja osobina objektno orjentiranih jezika itd.


Ja sad tek vidim sta si ti napisao, pratio sam thread koji je malo zalutao
Code:

class SiteManager
{
    SiteList sites = new SiteList();

    public static void Main()
    {
        SiteManager mgr = new SiteManager();     // ????

         mgr.sites = new SiteList();
 // dalje kod nije bitan
    }
}


Ovo je savrseno validno parce koda. Main je staticki metod koji kreira svoju (lokalnu) instancu SiteManager klase kojoj pripada. Main NIJE konstruktor, sto znaci da kriranje instance NECE ponovo kreirati novu isntancu SiteManager-a, dakle nema rekurzije i code radi ok. Jedina "greska" je u liniji:
Code:

mgr.sites = new SiteList();

ova linija je visak posto ce konstruktor SiteManager klase kreirati SiteList implicitno kroz liniju
Code:

SiteList sites = new SiteList();


E, sad drugi primer:
Code:

////////////// ili /////////////////////
class CTest
{
CTest test = new CTest();  // ????
}


Ovo parce koda je unelo zabunu u ovaj thread. Kreiranje field-a test se obavlja implicitno u konstruktoru i poziva opet konstruktor CTesta koji poziva konstruktor CTesta - tako dok stek ne pukne. Ovaj kod ne predstavlja uproscenu varijantu gornjeg primera i to je unelo zabunu.

Ne postoji specijalni naziv za ono sto SiteManager kalsa i njen metod Main koriste.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?05.06.2006. u 18:56 - pre 217 meseci
Citat:

Pa, ne možeš instancirati klasu unutar te iste klase... Koja bi bila svrha toga, uopšte?


Olivere, Olivere... dok ja skontam sta hoces da kazes. Trebao si napisati da ne mozes da instaciras klasu u konstruktoru a ne generalno u celoj klasi, kao na primer u nekoj f-ji. E sad je jasno
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?05.06.2006. u 21:20 - pre 217 meseci
Citat:
negyxo: Olivere, Olivere... dok ja skontam sta hoces da kazes. Trebao si napisati da ne mozes da instaciras klasu u konstruktoru a ne generalno u celoj klasi, kao na primer u nekoj f-ji. E sad je jasno


Hmm, zapravo i to moze , samo mora da se iskontrolise proces i prekine u nekom trenutku, npr:

Code:

public class Chain
{
    public Chain nextLoop = null;
    public Chain(int steps)
    {
        if (steps != 0) nextLoop = new Chain(steps-1);
    }
}


Narafski, mozda me neko demantuje ako zna, ali mislim da se slicno zaista ne moze napraviti preko default constructora a da bude thread safe.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?06.06.2006. u 06:45 - pre 217 meseci
Code:

new Chain(-1);


Stack?

Dobor, ajde onda treba jos jedna ispravka. Ne moze sve to sa default konstruktorom
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?06.06.2006. u 13:26 - pre 217 meseci
Citat:
negyxo
Code:

new Chain(-1);


Stack?


Hehe, good catch. Poenta je bila da konstrukcija objekta nema veze sa kontekstom, bilo koji tip koji nasledjuje Object moze se instancirati na bilo kom mestu u kodu ukljucujuci i metode/konstruktore svog sopstvenog tipa, i da eto postoje bar dve konkretne primene za takvo instanciranje...

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?07.06.2006. u 22:12 - pre 217 meseci
Mozda moze ovako

Code:

class Nova {
  static public int Count=0;

  public Nova() {
    Count++;
    if (Count < 10)
    {
        Nova NovaKlasa = new Nova();
    }
    Console.WriteLine(Count);
  }
}


Pisao sam iz glave, vjerovatno ima gresaka, htio sam naglasiti kako se sa static fieldom moze brojati broj instanci i na taj nacin izbjeci eventualnu beskonacnu petlju.

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Instancirani objekt u klasi u C# - nije mi jasno?08.06.2006. u 07:18 - pre 217 meseci
I sta posle 10-og new Nova(), nestalo objekata :)
Ma nije poenta u tome kako instacirati istu klasu unutar njenog konstruktora nego da je to moguce uraditi bilo gde, mada jedini izuzetak bi bili konstruktori jer bi to bilo lose resenje. Ako vec treba da se cuva referenca na sopstveni tip onda se to moze odraditi preko propertija.

Code:

public class TestClass
    {
        TestClass _anotherMe = null;

        public TestClass()
        {
        }

        public TestClass AnotherMe
        {
            get
            {
                if (_anotherMe == null)
                    _anotherMe = new TestClass();

                return _anotherMe;
            }
        }
    }
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Instancirani objekt u klasi u C# - nije mi jasno?

[ Pregleda: 2994 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.