Výsledky 1 až 9 z 9

Téma: [C#] struct vs. class

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  1. #1

    Standardní [C#] struct vs. class

    Ahoj,
    pri cteni dat ze souboru se slozitou strukturou nacitam data do obektu typu struct. Predavam li tato data prostrednictvim metody jinemu objektu, pouzivam klicove slovo ref resp. out. Chci tim docilit toho, aby se data nekopirovala, ale predavala odkazem. Nejsem si ale jisty tim, jestli to delam spravne a jestli to je dostatecne rychle v porovnani s promennymi neulozenymi ve strukture, ale volne ve tride. Ma smysl slucovat souvisejici data do struktury?

  2. #2

    Standardní Re: [C#] struct vs. class

    Urcite ma, budou u sebe i v pameti. Kdyz udelas tridu:
    class Trida
    {
    string polozka1;
    string polozka2;
    }

    Tak tyto dve polozky mohou byt kazda uplne jinde v pameti -> pokud k obema chces pristoupit, tak budes muset pravdepodobne nacist minimalne 2 stranky z pameti, oproti tomu kdyz bys to mel v strukture tak oba stringy se vesly do 1 pametove stranky.

    EDIT: zkousel jsem ti hrat se strukturama a prisel jsem na jednu podivnou vlastnost:
    Kód:
      interface intr
            {
                void udelej();
            }
            struct data : intr
            {
                public string polozka;
                public int pocet;
                public void udelej()
                {
                    polozka = "aaaaaaaaaaaaaaa";
                }
            }
    Kdyz vsak napisu:
    Kód:
               data a = new data();
               intr p = a;
               p.udelej();
    Tak se NEzmeni obsah struktury a!
    Naposledy upravil MEluZíNa; 11.12.2007 v 20:44.
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  3. #3

    Standardní Re: [C#] struct vs. class

    Ahoj,
    diky za radu. Priznam se, ze jsem nikdy nepremyslel nad tim, kde jsou v pameti data ulozena. Co se tyka tveho problemu, tak jsem jeste nevidel, aby struktura implementovala rozhrani, i kdyz to asi mozne je. A co je "a"? Take struktura? Pouzils keyword "new"?

    Jeste poznamka k te strukture. Nekde jsem cetl, ze by ve strukture nemelo byt moc dat. Kdyz jich je vice, melo by se prejit na tridu. Je to pravda?
    Naposledy upravil Optim; 11.12.2007 v 18:13.

  4. #4

    Standardní Re: [C#] struct vs. class

    Jo, muj haluz priklad je neuplnej, upravil jsem ho. Promenna a je samozrejme struktura data.


    No myslim, ze velikost struktury by nemela byt vetsi nez velikost stranky(vetsinou 4KB), protoze pak bys vlastne kdykoli chces zmenit byt je jediny bit, tak (asi?)musis nacist celou strukturu, tedy vic stranek. Ale to uz jsou jenom moje domnenky

    Mozna to bude jeste horsi, ze budes muset mit celou strukturu v registrech procesoru, takze to bude jeste radove min ~ 16bajtu... (vim ze registru je vic, ale prece jednou strkturou nezplacame vsechny registry...)
    Naposledy upravil MEluZíNa; 11.12.2007 v 21:16.
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  5. #5

    Standardní Re: [C#] struct vs. class

    No asi bych vám spíš než místo dohadů doporučil na tohle nějakou teorii ohledně psaní překladačů (struktura je většinou jen počáteční adresa a pak kompiler dodává offsety podle prvků).

    Navíc mi přijde trošku zcestné porovnávat tyhle 2 věci v managed jazyku.. Který je vlastně interpretovaný přes Virtual Machine a ta to provádí jak to páni programátoři naprogramovali..

    Stručně a jednoduše, ty zdržení vás dnes štvát vážně nemusí

    Jinak správná odpověď na rozdíl mezi třídou a strukturou v C++ v testu z předmětu programování v jazyce C++ na ČVUT, bylo že struktura má defaultně vše public . V jazyku C jsou to jen obyčejné balíčky dat.

    Reálná interpretace musí být tedy v překladači pak vlastně stejná jako class. Jen defaultně je uvnitř vše private.

    Navíc řešíte vážně blbost. V prasáckém kódu rozdíl struct a class určitě nepoznáte. Zdržení a prodlevy se hromadí úplně někde jinde. A jestli to někdo změří těším se na výsledky .

    Jinak asi z historických důvodů se používá taková Best practice, že Struct je prostě jen datový kontejner (dnes vlastně něco jako Java Bean, jelikož Java struct nemá) a class je balík dat a operace s ním spojeným.

  6. #6

    Standardní Re: [C#] struct vs. class

    struktura v C# sa od triedy lisia hlavne tym, ze je to hodnotovy typ t.j nachadza sa v zasobniku zatial co trieda je referencny typ ulozeny v halde

    vzhladom na to, ze struktura je hodnotovy typ priradenim A=B, dochadza ku kopirovaniu celeho obsahu strukturu, u triedy sa kopiruje len odkaz t.j. pouzitim stuktury dochadza k poklesu vykonu, ktory je zavisly od velkosti struktury
    => struktury je vhodne pouzivat pre male datove typy kvoli zvyseniu vykonu(vyhradenie pamati na zasobniku je rychle)

    samozrejme pouzitim ref bude odovzdana len adresa t.j. bude to rovnako rychle ako v pripade triedy
    Naposledy upravil mkmt; 12.12.2007 v 07:26.

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. MPlayer, problem s video driverem
    Založil Lopan v sekci fóra Operační systémy na bázi Unixu
    Odpovědí: 34
    Poslední příspěvek: 19.12.2006, 12:05
  2. Traffic shaping - problem s markovanim
    Založil CompCrasher v sekci fóra Sítě
    Odpovědí: 5
    Poslední příspěvek: 07.08.2005, 15:48
  3. Mandrake 10
    Založil jama v sekci fóra Operační systémy na bázi Unixu
    Odpovědí: 57
    Poslední příspěvek: 06.01.2005, 16:36
  4. MS VS .Net a Class v Dll
    Založil Lunatic v sekci fóra Programování
    Odpovědí: 1
    Poslední příspěvek: 19.11.2004, 15:19
  5. Odpovědí: 8
    Poslední příspěvek: 12.06.2004, 09:23

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •