Online kvízové otázky z C#

Cílem semináře je seznámit posluchače s jazykem C#, prostředím platformy .NET a tvorbou aplikací s grafickým uživatelským rozhraním. Předpokládají se znalosti objektově orientovaného programování.
Oracions
Matfyz(ák|ačka) level I
Příspěvky: 12
Registrován: 30. 1. 2014 16:18
Typ studia: Informatika Mgr.

Online kvízové otázky z C#

Příspěvek od Oracions »

Během semestru a obzvláště během zkouškového jsem si dělal poznámky o zajímavých věcech v C# a také jsem zahrnul některé otázky ve zkouškových písemkách. Fakta jsou v příloze k tomuto postu a kvízová aplikace, která obsahuje nějakou stovku otázek vždy s vysvětlením správné odpovědi, je na http://definitions.somee.com/SelectExamForm.aspx.

Za správnost sice neručím, ale všechno jsem zkoušel ve Visual Studiu, takže by to mělo být správně.
Přílohy
CSharp Full Skripta.txt
(20.22 KiB) Staženo 481 x
svick
Matfyz(ák|ačka) level I
Příspěvky: 18
Registrován: 22. 2. 2008 19:19
Typ studia: Informatika Mgr.
Bydliště: 17. listopad

Re: Online kvízové otázky z C#

Příspěvek od svick »

  • 63, 64: ten kód nedává moc smysl, lokální proměnné nemůžou být volatile a nestatické fieldy nemůžou na sobě záviset. U 63 navíc ještě chybí typ u b.
  • 88: nepřesné. where T : struct vynutí, že T je hodnotový typ, ale kromě nullable typů.
  • 95: vysvětlení je zavádějící. && (a ||) se sice nedají přímo předefinovat, ale dají se použít pro uživatelské typy, pokud daný typ předefinuje operátory & (nebo |), true a false.
  • 104: špatně, je sice pravda, že se použije porovnání referencí, ale obě reference jsou stejné, protože oba literály "a" se zkompilují do jedné položky v metadatech. Ale myslím si, že tohle chování není zaručené.
  • 107: překlep: kontravariantní parametr se označuje "in", ne "int".
  • 115: zavádějící: inference je součástí kompilace, nedá se říct, že se provede před kompilací.
Oracions
Matfyz(ák|ačka) level I
Příspěvky: 12
Registrován: 30. 1. 2014 16:18
Typ studia: Informatika Mgr.

Re: Online kvízové otázky z C#

Příspěvek od Oracions »

Díky za opravy.
63, 64: Opraveno, tyto proměnné jsou nyní členské proměnné třídy A, a čtení a přiřazování se odehrává uvnitř metody této třídy.

88: Opraveno.
The value type constraint specifies that a type argument used for the type parameter must be a non-nullable value type. All non-nullable struct types, enum types, and type parameters having the value type constraint satisfy this constraint. Note that although classified as a value type, a nullable type (§4.1.10) does not satisfy the value type constraint.

95: Změněno na:
"&& a || používají zkrácené vyhodnocování.
Operátory && a || nelze předefinovat. Existují přesto způsoby, jak je použít na vlastní typy: můžete na vlastním typu definovat implicitní konverzi na typ bool, nebo můžete nadefinovat operátor & (nebo |) a operátory true a false.
Operátory "true" a "false" rozhodují o tom, zda bude vyhodnocování pokračovat. Zkrácené vyhodnocování lze tedy naimplementovat i po předefinování operátorů & a |."

104: Díky, opraveno. Ta otázka neměla být o řetězcích, takže jsem "a" změnil na čísla. Nový text vysvětlení:
"Operátory nejsou nikdy virtuální. Tedy pokud typ přetypujete na Object, bude se používat == na objektu, tedy porovnávání referencí.
Podrobněji, čísla se nejprve zaboxují do referenčních typů (každé zvlášť), a ty jsou potom porovnány na referenci.
Kdybychom stejný kus kódu spustili s řetězci (např. "hello" místo 10), už by byla rovnost splněna, protože kompilátor všechny řetězcové konstanty sloučí do jedné. To je zvláštnost řetězcových konstant."
Chování u řetězců, zdá se, je zaručené: "Each string literal does not necessarily result in a new string instance. When two or more string literals that are equivalent according to the string equality operator (§7.10.7) appear in the same program, these string literals refer to the same string instance."

107: Opraveno.

115: Změněno na:
"Klíčové slovo "var" je jen syntaktická zkratka.
Kompilátor slovo "var" nahradí vhodným typem podle toho, co je na pravé straně výrazu. Tedy "var x = "Hello"" je to samé jako "string x = "Hello"". Kompilátor se pokusí najít co nejspecifičtější typ podle pravé strany výrazu, bude tedy preferovat System.String před System.Object. Pokud by se mu typová inference nepovedla, vyhodí chybu kompilátoru."

Striktně vzato dokonce var není ani syntaktická zkratka, kompilátor nebo přímo nahrazovat řetězec "var" řetězcem "System.String", ale bude přímo počítat s tím, že "x" je typu String, ale to není pro přednášku důležité.
Lucifer

Re: Online kvízové otázky z C#

Příspěvek od Lucifer »

Odkaz už nefunguje, je možné sa k tomu ešte nejako dostať?
Odpovědět

Zpět na „NPRG035 Jazyk C# a platforma .NET“