[C#] Polymorfizmus + Interface

Programovacie jazyky, rady, poradňa...
Sagittarius
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2883
Registrovaný: 13 feb 2007, 21:58
Bydlisko: Do nekonečna a ešte ďalej

[C#] Polymorfizmus + Interface

Príspevok od používateľa Sagittarius »

Mám knižnicu, v ktorej sú dve triedy ZretazenyZoznam a PrvokZoznamu. V triede ZretazenyZoznam mám metódu vypisCely, ktorej výstupom je PrvokZoznamu[] (pole prvkov zoznamu). Ďalej mám v aplikácii triedu Osoba. A chcem v ListBoxe vypísať zoznam osôb. Trieda Osoba dedí po triede PrvokZoznamu. Ten výpis vyzerá asi takto:

Kód: Vybrať všetko

 ZretazenyZoznam zoznam = new ZretazenyZoznam();
            for (int i = 0; i < zoznam.pocet; i++)
            {
                Osoba osoba = new Osoba(zoznam.vypisCely()[i].meno, zoznam.vypisCely()[i].priezvisko, zoznam.vypisCely()[i].datumNarodenia);
                ukazLBox.GetItemText(osoba.ToString());
            }
            
            ukazLBox.Show();
Ale takto to nejde, chcel by som spýtať ako to mám spraviť, aby to šlo.

Ďakujem.
refr0
Star
Star
Príspevky: 521
Registrovaný: 26 nov 2005, 10:55
Bydlisko: Trenčín
Kontaktovať používateľa:

Re: [C#] Polymorfizmus

Príspevok od používateľa refr0 »

no neviem cele to mas nejake naprd napisane nechapem naco 2x vytvaras novu instanciu triedy osoba potom pises ze chces pridat items do listboxu vidim tam len nejaky ukazLBox a metodou getitemtext tym urcite nic nepridas a dalsia vec v triede osoba metodu "ToString()" mas svoju alebo co cakas ze ti to vypluje...
Sagittarius
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2883
Registrovaný: 13 feb 2007, 21:58
Bydlisko: Do nekonečna a ešte ďalej

Re: [C#] Polymorfizmus

Príspevok od používateľa Sagittarius »

S tou osobou som sa pomýlil to tam nemá byť, ale to aj hneď môžem vymazať, aby to nemýlilo.
Metódu ToString() mám svoju.
S tým ListBoxom som ešte nerobil, takže tú metódu si potom nájdem, v tom nebol problém. :)
Problém je práve s tým riadkom nad ním, metóda vypisCely, by mala ako výstupný parameter dávať pole prvkov PrvokZoznamu[], resp. pole osôb Osoba[] a trieda Osoba dedí od triedy PrvokZoznamu, lenže tak to nefunguje. Ani tak, že by som výstup najskôr uložil do poľa až potom vytváral Osobu (pole.meno, ...) a práve nemôžem dávať tomu zoznamu prvkov atribúty osoby.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: [C#] Polymorfizmus

Príspevok od používateľa harrison314 »

Preco to rbis takto cudne, ono to ma velmi daleko od polymrofyzmu.

Ale tvoj problem vyrisi ked bude PrvokZoznamu dodit od triedy Osoba a potom puzijes len upcasting.
refr0
Star
Star
Príspevky: 521
Registrovaný: 26 nov 2005, 10:55
Bydlisko: Trenčín
Kontaktovať používateľa:

Re: [C#] Polymorfizmus

Príspevok od používateľa refr0 »

aj mne sa zda :D riesis celkom banalnu vec dako zlozito...
Sagittarius
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2883
Registrovaný: 13 feb 2007, 21:58
Bydlisko: Do nekonečna a ešte ďalej

Re: [C#] Polymorfizmus

Príspevok od používateľa Sagittarius »

No ale PrvokZoznamu, nemôže dediť od Osoba, lebo PrvokZoznamu je v tej knižnici. A ono by to malo byť pre iné triedy ako Osoba, takže takto to riešiť nemôžem. :)
Tak sa ale sa ale ešte spýtam ako to môžem riešiť, keď: mám knižnicu, v ktorej sú triedy ZretazenyZoznam a PrvokZoznamu, v triede ZretazenyZoznam sú metódy pre zreťazený zoznam (nie všetky, ale len tie, čo potrebujem) a jedna z nich je (má byť) metóda na vypísanie celého zoznamu. Potom mám triedu Osoba, ktorá má svoje atribúty. A tú Osobu chcem vkladať do zoznamu a nakoniec celý zoznam vypísať. Ako by som to mohol riešiť? :)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: [C#] Polymorfizmus

Príspevok od používateľa harrison314 »

Vsetky podtriedy triedy PrvokZoznamu ( prvku zoznamu ), mozes vkladat do ZretazenehoZoznamu , bez akychkolvek straosti to ti riesi polymorfizmus ( je to genialny vynalez :) ).
A potom to vsetko vypises iba cez obycajny foreach ako PrvokZoznamu, tiez vdaka polymorfizmu.

Len mam sa mi zda ,ze nemas ani najmensieho tusenia co je to polymorfyzmus.
Sagittarius
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2883
Registrovaný: 13 feb 2007, 21:58
Bydlisko: Do nekonečna a ešte ďalej

Re: [C#] Polymorfizmus

Príspevok od používateľa Sagittarius »

Dobre na chvíľku odbočme od tejto témy, chcel by sa spýtať, ako by som mal napísať takýto interface v C#.

Kód: Vybrať všetko

public interface IZoznam {
    ZretazenyZoznam zoznam = new ZretazenyZoznam();
}
Takto by to malo fungovať v Jave, ale C# to takto nefunguje, tak sa chcem ako by som to mal napísať v C#, ak sa to v C# takto dá. Potrebujem to kvôli, aby som mohol použiť napr. zoznam.pridaj() v metóde po stlačení tlačidla, ale bez toho aby som vytváral zoznam v tej metóde, lebo by mi to vždy po stlačení tlačidla vytvorilo nový zoznam a ja chcem práve pridávať do zoznamu.

Ináč využitie polymorfizmu chápem, tak, že mám napr. abstraktnú triedu Obsah, v ktorej mám metódu vypis a ďalej mám triedy Osoba, Auto, ..., ktoré dedia po Obsahu a preto môžem v programe použiť, osoba.vypis(), auto.vypis(), ... podľa toho, čo potrebujem práve vypísať.
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: [C#] Polymorfizmus + Interface

Príspevok od používateľa javatar »

interface nemoze obsahovat atributy - len metody a funguje to tak aj v jave takze ten kod by ti nefungoval ani v jave
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: [C#] Polymorfizmus + Interface

Príspevok od používateľa harrison314 »

Ono bz to v jave fungovalo keby je ten atribut staticky, mozno aj v C# ( ale niesom si isty ).
Ale miesat rozhrania z atributmy nieje ciste.

Ked rozumies polymorfyzmu, tak preco ho nepouzijes ?
Sagittarius
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2883
Registrovaný: 13 feb 2007, 21:58
Bydlisko: Do nekonečna a ešte ďalej

Re: [C#] Polymorfizmus + Interface

Príspevok od používateľa Sagittarius »

Ďakujem, na koniec som použil ako výstupný parameter z metódy vypisCely Object a fungovalo to. A ten interface som v Jave používal tak ako som napísal (pravdaže v inom kontexte), ale som zabudol, že som to používal keď tú inštanciu potreboval mať vytvorenú pre viaceré triedy rovnakú. Teraz som to použil ako atribút triedy Formu.
Napísať odpoveď