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       69 957×

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 První český hackathon ve vlaku inspirovaly služby jako  Tinder, Airbnb nebo Uber

První český hackathon ve vlaku inspirovaly služby jako Tinder, Airbnb nebo Uber

Patnáct set kilometrů, cesta přes dva státy, šestnáct hodin programování a přísun
energy drinků, tak by se dal shrnout unikátní hackathon ve vlaku pořádaný Kiwi.com.
Z Prahy do Košic a zpět se svezlo celkem 13 týmů, každý s originálním nápadem. Hlavní
výhru, voucher na letenky v hodnotě 2 500 EUR, si v Praze převzal tým až z Ukrajiny.
Společně naprogramovali aplikaci Fly2event, která vytváří cestovatelské balíčky ušité
uživatelům na míru podle toho, co si „olajkovali“ na Facebooku. Projekt má i podle
organizátorů budoucnost a jeho tvůrci ho v současnosti už spouští na webové stránce
fly2event.com.

Reklama
Reklama
Obrázek ke článku Gamifikace nakupování dorazila i do České republiky

Gamifikace nakupování dorazila i do České republiky

Zákazníci zejména retailových společností jsou často znuděni klasickými věrnostními či motivačními programy. Většinou z toho důvodu, že jsou jeden jako druhý a nepřináší nic nového. Ale i v České republice se projevují zahraniční trendy, nedávno zde totiž vstoupila na trh a rychle se uchytila nová platforma kombinující to nejlepší z věrnostních a motivačních programů, která navíc využívá prvky gamifikace – Rondo.cz. Na hlavní milníky vývoje nálad a motivace zákazníků a nejnovější trendy se zaměřil Jan Hřebabecký, spoluzakladatel Rondo.cz

Obrázek ke článku NopCommerce – datová vrstva a přístup k datům – 2. díl

NopCommerce – datová vrstva a přístup k datům – 2. díl

V minulém článku jsme si představili platformu NopCommerce z globálního pohledu. V dnešním díle se již zaměříme na konkrétní část systému, a to datovou vrstvu. Představíme si základní stavební kameny systému v podobě doménových objektů. Ukážeme si, jakým způsobem rozšířit doménové objekty a jakým způsobem přistupuje NopCommerce k nastavení systému a modulů.

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