C# - 2. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# - 2. lekceC# - 2. lekce

 

C# - 2. lekce

Google       Google       15. 8. 2005       75 562×

Tento díl bude o odkazových a hodnotových proměnných, escape sekvencích a také se malinko koukneme na boxing, je toho dost, tak teď nezbývá, než si to celé přečíst...

Proměnné odkazové a hodnotové

Jazyk C#, jako každý z rodiny .net, má zabudovaný systém ochrany typů (proměnné definované v jednom jazyce mají stejnou platnost v libovolném jiném jazyce). Proměnné jsou deklarovány a existují jako určitý typ, a tak smí uchovávat pouze hodnoty, pro které byly deklarovány. Pravdou ale také je, že proměnné mohou uchovávat i jiné odkazové a hodnotové typy, ovšem musejí to být ukazatelé (pointery), ty budou blíže popsány v dalším díle.

Stručně, rozdíl mezi hodnotovým typem a odkazovým (referencí):
- pokud je proměnná hodnotovým typem, obsahuje objekt s nějakou hodnotou a žádná jiná proměnná k tomuto objektu nemá přístup (ačkoliv jiná proměnná může nabýt stejnou hodnotu)
- pokud je proměnná referencí, obsahuje odkaz, který směřuje k nějakému objektu. Jiná proměnná může obsahovat odkaz ke stejnému objektu.

Hodnotové typy

I v C# je možné si nadefinovat vlastní datový typ nebo strukturu, o tom někdy jindy. Tyto uživatelsky definované proměnné jsou kompilátorem upraveny úplně stejně jako ty předdefinované základní typy, akorát jsou upraveny později. Všechny typy jsou odvozeny od základního objektu, hlavně toto umožňuje ochranu typů (v praxi to ale oceníte jen v případě, že děláte ve více jazycích z platformy .net ). Následuje tabulka předdefinovaných hodnotovým typů:

C# Typ .Net Framework (System) typ znaménkový? velikost v bytech rozsah
sbyte System.Sbyte A 1 -128 až 127
short System.Int16 A 2 -32768 až 32767
int System.Int32 A 4 -2147483648 až 2147483647
long System.Int64 A 8 -9223372036854775808 až 9223372036854775807
byte System.Byte N 1 0 až 255
ushort System.Uint16 N 2 0 až 65535
uint System.UInt32 N 4 0 až 4294967295
ulong System.Uint64 N 8 0 až 18446744073709551615
float System.Single A 4 ± 1.5 x 10-45 to ±3.4 x 1038 se 7 desetinnými místy
double System.Double A 8 ± 5.0 x 10-324 to ±1.7 x 10308 s 15 nebo 16 desetinnými místy
decimal System.Decimal A 12 ±1.0 x 10-28 to ±7.9 x 1028 s 28 nebo 29 desetinnými místy
char System.Char jiný 2 jakýkoli Unicode znak (16 bit) (znakový typ)
bool System.Boolean jiný 1 / 2 true (pravda) or false(lež)

Zde jsou deklarovány dvě proměnné a nastaveny v rozsahu typu integer:


int x = 10;
int y = x;
y = 20; // poté má x hodnotu 10 a y hodnotu 20

Referenční typy

Předdefinované referenční typy jsou object a string, typ object byl zmíněn výše, je to základní třída všech ostatních typů. Nové reference mohou být užívány v deklaracích class, interface a delegate. Reference je odkaz na místo v paměti, kde se nalézá daný objekt a z toho je získána hodnota. V následujícím příkladě získají 2 proměnné referenci na stejný objekt (pro přehlednost, objektem je obsah vlastnosti "myValue"):


object x = new object();
x.myValue = 10;
object y = x;
y.myValue = 20; // nakonec se x.myValue a y.myValue rovnají 20

Tento kus kódu ukazuje, že změna provedena s nějakou referencí se odrazí i v jiné, pokud ukazuje na stejný objekt, je nutné si uvědomit, že reference je jen odkazem, a když budete mít 50 referecí na jeden objekt, bude mít všech 50 stejnou hodnotu, protože objekt a tím pádem i hodnota je jen jeden (jedna :) ). Drobnou vyjímkou mezi referencemi je datový typ string, protože se na první pohled chová spíše jako hodnotový typ a tak je i používán:


string s1 = "hello";
string s2 = s1;

Teď mají s1 a s2 stejnou hodnotu "hello", ale když provedete něco nekalého, :)

s1 = "goodbye";

tak se s1 = "goodbye", ale s2  = "hello". Jak je to možné? Ano, tušíte správně. Je v tom malý trik, protože proměnné typu string jsou imunní reference a jejich hodnota nesmí být po vytvoření měněna, tak se při změně hodnty z "hello" na "goodbye" vytvořil nový objekt, na který odkazuje s1, ale s2 zůstala ukazovat na ten starý s hodnotou "hello". No snad se z toho nezamotáte, raději už ty referenční proměnné ukončíme...

Escape sekvence a Verbatim řetězce

Aneb když potřebuje psát to, co je normálně součástí syntaxe. Jak napsat text s uvozovkymi a ještě ho zalomit?:


string a = ""Hello WorldnHow are you"";

výsledek:


"Hello World
How are you"

další escape sekvence:

Character Escape Sequence
' '
" "
\
Alert a
Backspace b
Form feed f
New Line n
Carriage Return r
Horizontal Tab t
Vertical Tab v
An Unicode character specified by its number e.g. u200 u
An Unicode character specified by its hexidecimal code e.g. xc8 x
null (zero)

A abyste se nenudili, tak si je můžete vyzkoušet sami, ať vše nemusím překládat :), jako základ můžete vzít aplikaci helloworld a postupně tyto sekvence pasovat to textvého řetězce.

Verbatim řetězce

Pokud píšete delší text, kde byste museli psát mnoho escape sekvencí, raději před řetězec napiše zavináč (@) a dál můžete psát normálně, až na uvozovky, ty potřebují escape sekvenci vždy!, ale místo toho, co je v tabulce, je escape sekvence ve verbatim řetězci zdvojené uvozovky (""). Př.:


string text = @"the word ""big"" contains three letters."
string text = @"C:dokomentydopis.txt" // časté použití řetězce verbatim

Boxing (zapouzdření)

C# dovoluje převést a poslat hodnotový typ jako referenci a výsledek tohoto převodu "zabalení" zase převést zpět. Následující kód je ukázkou zapouzdření. Na druhém řádku je kopie proměnné i zabalena do referenční proměnné box, když je proměnná takto zabalená, pomocí operátoru "is" můžeme zjistit, jakého typu je. A zjistíme, že referenční proměnná "box" obsahuje kopii proměnné typu "int". A k čemu tato vymyšlenost vlastně je? Jedna z možností je přetypování, to je případ, kdy už se velikostně proměnná do typu, který jste prve zvolili, prostě nevejde (směr přetypování je možný jen z menšího typu do většího, opačně nikoli!). Tak a to je vše, ale ještě malý typ z escape sekvencí, nezapomeňte na a :), ta při větším počtu dokáže lézt pěkně na nervy... jinak ty ostatní slouží převážně na formátování textu. Přeji vám příjemnou zábavu.


int i = 123;
object box = i;
if (box is int)
{Console.Write("Box contains an int");} // this line is printed

Zdroj: http://www.softsteel.co.uk/tutorials/cSharp/lesson4.html

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor programuje v C#.

Nové články

Obrázek ke článku Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý