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

C# - 2. lekceC# - 2. lekce

 

C# - 2. lekce

Google       Google       15. 8. 2005       67 243×

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...

Reklama
Reklama

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 Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Reklama
Reklama
Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý