od Oracions » 15. 5. 2014 16:59
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é.
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é.