Diskuze: Pomoct studentovi
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ano, tvoje odpověď na otázku 1 je dobře.
Jelikož evidentně nemá Cislo implementaci ToString(), tak konzole prostě vypíše kompletní identifikátor včetně názvu programu.
10 a 11 má být co? Jako ukázat, že v paměti jsou pouze 2 instance třídy ale 4 instance struktury?
Čistě ze zvědavosti, kde studuješ?
U 6) to napíše kompletní identifikátor, ale ne 0, je to v pořádku?
U 7) to napíše kompletní identifikátor, ale ne 0, je to v pořádku?
U to napíše kompletní
identifikátor, ale ne Null, je to v pořádku?
10 a 11 je podle mě od toho, abychom nakreslili, že v případě referenčního typu bude přímo v paměti napsaná adresa, kde je uložená proměnná, ale v případě struktury do adresy rovnou napsat hodnotu
Studuju na UTB. Jestli na to ještě koukneš a zodpovíš mé otázky, moc
mi pomůžeš. Děkuji
Aha, tak s tím null jsem se spletl.
No jelikož si to přímo zkoušíš a vidíš co to udělá, tak to v
pořádku bude
Děkuji. A k té 10. a 11. ještě jen.
Mohlo by to takhle být? Jestli je tam správný počet instancí a hodnoty v
paměti? (viz. obrázek)
Díky za odpověď. Tohle je už moje poslední žádost o pomoct.
Tyjo upřímně jsem se do toho teď zamotal.
Po posledním projetí v tom vidím jednu instanci třídy, protože sice jsi konstruktor volal 2x, ale do proměnné "f" hned po vytvoření instance dáváš referenci na "d". Tím pádem tu nově vytvořenou instanci seřere garbage collector, protože na ní nic neodkazuje.
Každopádně bych to vyzkoušel pomocí metody ReferenceEquals(), díky které zjistíš, jestli jde o stejné instance.
Btw jestli tě to celé mate, tak si z toho nic nedělej. V C# jsem pracovně dělal pár let a netuším, jakou má praktickou hodnotu takovéto zmatené přepisování proměnných jinými instancemi...
Tak vyzkoušel jsem RefernceEquals() a ukazuje to true ať zadám jakoukoliv
kombinaci. Podle toho soudím, že v posledním obrázku pro Třídy by mělo
být ještě c a všechny by měli ukazovat na stejnou referenci (takže
vlastně tak jak je to v obrázku) a v ní by měla být hodnota null podle
posledního kroku, kde jsme použili vynuluj, že ano?
To je zamotané
"c" je nastavené na null, takže to nereferencuje žádnou instanci.
Hele neumí VS v nových verzích zobrazovat přímo objekty programu v
nějakém debug okně? To by asi dost pomohlo
Áno, tvoj posledný príspevok to opisuje správne. V prípade, že je Cislo trieda, tak všetky premenné c, d, e, f ukazujú na jednu adresu v pamäti (konkrétne na halde), na ktorej je hodnota null.
Mimochodom, pokiaľ Cislo (či už trieda, alebo štruktúra) nemá
preťaženú metódu ToString, tak pri výpise budú premenné typu Cislo stále
vypisovať len meno svojho typu (čiže niečo ako ConsoleApp.Cislo alebo v
tvojom prípade ConsoleApp3.Program.Cislo). To sú tie tvoje "nesmysly".
Moreover, pokiaľ je hodnota danej premennej null, nemalo by sa vypísať vôbec
nič.
Pre výpis premennej hodnota daného objektu / štruktúry typu Cislo treba buď
ToString preťažiť, alebo stále vypisovať pomocou menoPremennej.hodnota
.
Ad Filip Němeček - toto nie je o zmätenom prepisovaní premenných, ani to nie je vôbec o C#. Je to o tom, že chalan sa musí naučiť rozdiel medzi hodnotou a referenciou, medzi pamäťou na stacku a na heape atď. Bude to potrebovať takmer vo všetkých programovacích jazykoch. Pokiaľ v tom bude len tápať, tak akonáhle použije niekde priradenie, bude mať zaděláno na kopu logických chýb typu "túto premennú som prepísal, ale mimo funkcie sa jej obsah nezmenil", prípadne "tu som s tou premennou pracoval len vo vnútri funkcie, ale zmenil sa obsah aj tejto premennej mimo nej". Tvrdiť mu, že to nemá praktický zmysel ho akurát odradí od toho, aby tomu venoval pozornosť.
Pre niekoho je to možno náročnejšie na pochopenie (u nás sa to berie
ešte na gympli a vidím tú pohromu first hand), ale jednoznačne to každý
potrebuje zvládnuť, kým mu niekto dá čokoľvek praktické pod ruku. A
modliť sa, aby predtým nemusel náhodou pracovať s jazykom, ktorý sa sám
nestará o memory management
Děkuji za rozsáhlou odpověď. Obecně jsem měl jasno, jen s těmi
referenčními typy ne tak úplně, ovšem teď už to je úplně jasné.
Tak zítra a zkoušku, ještě jednou díky za pomoc.
Zobrazeno 11 zpráv z 11.