Diskuze: Materiály pro učení C#
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 50 zpráv z 55.
//= 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.
Nedá se říci, že C# nějak moc umím, programuji naprosto intuitivně
Stačí, když umíš
jakýkoli jiný jazyk, je to všechno stejné (pořád cykly, podmínky...),
vlastně těžím ze znalostí v Delphi, zbytek zjistíš pokusem a omylem nebo
najdeš v Google.
Pokud máš zkušenosti s C++ (nejspíš asi s visual c++) tak pro tebe
nebude težký začt. Určitě doporučuji knihu 1001 tipů a triků pro C# od
autora Amadeo Mareš. Je to tam udělaný v podobě příkladů a jestli umíš
C++, tak to je v pohodě
Odpusť, že jsem nenavázal na vlákno, utěkají mi myšlenky
Tak to je super Já
píšu co mě napadne, píšu bez chyb a stejně to nefunguje tak jak má....
(pokus omyl)
Psal jsem to před třemi lety, teď C# učím a napsal jsem o něm učebnici
Prosím o tip na nějakou dobrou učebnici programování v C#. Nejlépe na úrovni začátečníka. Díky za odpovědi.
Ahoj zkus Visual C# Krok za krokem http://knihy.cpress.cz/…-c-2010.html anebo zdejší
tutoriály o C#, které jsou velmi rozsáhlé, od začátku až po pokročilé
techniky a velmi kvalitní. Navíc téměř hned a s ochotou ti zde někdo
pomůže či proadí
Ahoj, mel bych zajem o pdf verze knih. diky predem. mail je romansimku@gmail.com
Jestli stačí .pdf knihy v Angličtině, tak tady jsou 3 http://uloz.to/…XPD/c-en-zip
Kedze uz ovladas c++ tak je zbytocne zacinat s knihami pre aciatocnikov, mozes skusit toto: http://www.amazon.com/…p/1430242337 (da sa stiahnut aj pdf verzia).
Čo tým myslíš? Pokial viem tak oop v c++ je veľmi podobné tomu v c#.
Pokud vím, tak OOP je v C++ téměř nepoužitelné. Ano, dají se tam udělat třídy, jejich instance, dají se zavolat metody, i dědičnost tam je, ale to je asi tak všechno.
Například tam chybí garbage collector. Jak zlikviduješ objekt, který returnem předáš volající metodě a ta ten objekt předá jako parametr další metodě? Kdo bude odpovědný za jeho likvidaci?
Jsou tu techniky jako třeba smart pointers.
A memory management se přeci nijak netýká OOP, to jsou dvě úplně odlišné věci.
Btw v C++ se také dá používat GC a můžeš si vybrat, jestli ho používat chceš nebo ne.
Takže OOP v c++ je nepoužiteľné preto lebo nemá GC? Proti tomu sa veľmi
ťažko argumentuje .
Dám ti sem jeden pekný citát:
Bjarne Stroustrup: C++ is my favorite garbage collected language because it generates so little garbage
OOP v C++ je velmi jednoduše použitelné, avšak jelikož to byl jeden z prvních návrhu, jsou tam rozdíly. Ty ale neubírají na funkčnosti. Jen dovolují začátečníkům tvořit prasacky kod. Tobě asi vadí, že to neobsahuje všechny ty metody na které jsi zvyklíz oostatních jazyků (ikdyž ty knihovny existují, jen nejsou součástí) a musíš si je psát sám pokud to neskombinujes s nějakým frameworkem(.NET...) C++ má GB, ale jen velmi slabou. Proto si většina C++ programátorů píše svoji vlastní.
Jedná se o to, že v C# se OOP dělá jinak, než v C++ a proto je nutné se to OOP pro C# naučit znovu, aby si do něj programátor netahal nevhodné návyky z C++.
Například vytváření dočasných proměnných a objektů, pokud potřebuji výstup z jedné metody předat jako parametr jiné metodě. Používání ref/out parametrů, manipulace s atributy jednoho objektu z jiného objektu, ...
"Používání ref/out parametrů"
Třeba když máš funkci, která má barvu uloženou v int rozložit na RGB složky, tak neznám lepší způsob, než to udělat přes out.
void RozlozNaRGB(int barva, out byte r, out byte g, out byte b)
{
...
}
"manipulace s atributy jednoho objektu z jiného objektu"
Tohle se tu už řešilo milionkrát, v objektové aplikaci máš na barvu přece strukturu a tu vrátíš. Vracet 3 hodnoty je blbost a chyba v návrhu.
Pořád píšeš samé low-level příklady, abych to měl co nejtěžší
Proč bych používal takovou metodu, když v C# mohu použít barva.Red, barva.Green a barva.Blue?
Manipulace s atributy cizích objektů nejde dělat, pokud jsou privátní.
V objektové aplikaci by byla ta jeho metoda konstruktorem.
Programátoři v C++ berou barvu jako int místo struktury. Pak se nemůžeme divit, že jim z toho vznikají takové divné metody.
Chyba v návrhu. To od tebe a Kita slyším pořád, ale ukažte mi, kde je
psaný, že vracet hodnoty přes out a ref je špatně, zatím jsem to jen
slyšel od vás
Strukturu (místo třídy) použít můžu, ale kvůli rychlosti
nepoužívám, přeci jen oproti jednomu obyčejnému intu má nějakou
režii.
U operací, kde se dělá s pixely intenzivně, to je znát hodně a je to
rozdíl ve výkonu je třeba dvojnásobný.
To nemá nič spoločne z jazykom. enum môžeš vytvoriť aj v c++.
Pokud budeš používat int místo struktury barva, tak netvrď, že programuješ objektově. Tato část programu prostě není v OOP, takže s tím nemůžeš argumentovat. Je napsána procedurálně, jen ji možná někde výš jako komponentu používáš objektově.
Se podívej do .NETu, kromě TryParse to žádná metoda nedělá a místo toho je milion tříd na všechno možné, proč asi? Když píšeš aplikaci v objektovém jazyce, tak ji píšeš objektově. Až teprve když máš někde výkonnostní problémy (většinou když děláš něco nestandardního, na co ten jazyk není navržený), tak se uchyluje k zápisům, které jsou nepřehledné. Neznám tvůj usecase, jako vždy jsi napsal pouze část vytrženou z kontextu. Kompromisem by mohlo být aby metoda vracela pole.
Protože takovéhle low-level věci často používám - bitmapa jako pole
čísel, vlastní komprese, pathfinding apod.
"Manipulace s atributy cizích objektů nejde dělat, pokud jsou
privátní."
Proti tomu přece nic nenamítám, v C++ se také rozlišuje viditelnost
členů, ale nijak se to netýká přechodu C++ k C#
Nemusis požiť int na uchovávanie farby. Možeš použiť enum:
enum class Color{Red, Green, Blue,};
Do int-u sa ale lepšie ukladajú rôzne otiene.
Pořád jste mi nikdo neodpověděl, proč nebo jak out/ref odporuje OOP.
OOP nepoužívám jen u částí, kde to OOP příliš brzdí - obvykle u takovýchto low-level algoritmů, zbytek aplikace samozřejmě kvůli přehlednosti je plně OOP.
Jsem ti to psal několikrát, odporuje tím, že místo abys pracoval s objekty tak pracuješ s holými proměnnými, které ačkoli mají mezi sebou nějaký vztah, tak nejsou součástí objektu.
Takže low-level píšeš procedurálně a high-level (snad) objektově.
Psal jsem, že public atributy bývají nevhodné návyky, které si programátoři přetahují z C++ do C#. Nemohu za to, že se v C++ nenaučili používat privátní atributy, asi ten jazyk nějakým způsobem svádí k public. Proto v C# zavedli vlastnosti, aby jim to usnadnili.
Ale já počítám s odstíny. Kde vidíš nějakou zmínku o enum?
Možná jsem měl raději napsat barva.R, barva.G a barva.B
Napr tu:
"Proč bych používal takovou metodu, když v C# mohu použít barva.Red,
barva.Green a barva.Blue? "
Predpokladal som že to ej enum...
Čo sa týka atribútov, tak tie sú v c# hlavne kvôli tomu že nie je možne vrátiť referenciu.
Zobrazeno 50 zpráv z 55.