CS-opas:C-Sharpin alkeet
Mureakuha
- Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: C#:n alkeet.
Sisällysluettelo |
Perustietotyypit
Kokonaislukutyypit
| Tyyppi | Koko bitteinä | Alue |
| sbyte | 8 | -128 ... 127 |
| byte | 8 | 0 ... 255 |
| short | 16 | -32768 ... 32767 |
| ushort | 16 | 0 ... 65535 |
| int | 32 | -2147483648 ... 2147483647 |
| uint | 32 | 0 ... 4294967295 |
| long | 64 | -9223372036854775808 ... 9223372036854775807 |
| ulong | 64 | 0 ... 18446744073709551615 |
| char | 16 | U+0000 ... U+ffff |
Liukulukutyypeistä
| Tyyppi | Koko bitteinä | Merkitseviä | Alue |
| float | 32 | 7 digits | 1.5 x 10-45 to 3.4 x 1038 |
| double | 64 | 15-16 digits | 5.0 x 10-324 to 1.7 x 10308 |
| decimal | 128 | 28-29 decimal places | 1.0 x 10-28 to 7.9 x 1028 |
Tekstistä
Erikoismerkit tekstissä
| Escape Sequence | Meaning | Suomeksi |
| \' | Single Quote | Heittomerkki |
| \" | Double Quote | Lainausmerkki |
| \\ | Backslash | Kenoviiva |
| \0 | Null, not the same as the C# null value | Null-merkki (huom: ei sama kuin C#:n null-arvo) |
| \a | Bell | "Kello", eli koneen piipperiääni |
| \b | Backspace | Askelpalautus |
| \f | Form Feed | Sivun kelaus |
| \n | Newline | Uusi rivi |
| \r | Carriage Return | Vaunun palautus |
| \t | Horizontal Tab | Sarkain |
| \u0061 (esimerkki) | unicode | Unicode-merkki 0x0061 |
| \v | Vertical Tab | Pystysarake |
Matematiikkaa
Matematiikassa C# noudattaa yleistä matematiikan säännöstöä eli ensin potenssilaskut sekä funktiot, sitten kerto- ja jakolaskut ja viimeisenä vähennys- ja "pluslaskut".
| Laskuoperaattori | Esimerkki | Selitys |
| + | x=5+5;//10 | asettaa lisää n:n viisi ja tallentaa vastauksen muuttujaan x |
| - | x=5-5;//0 | vähentää n:stä viisi ja tellentaa vastauksen muuttujaan x |
| / | x=5/5;//1 | jakaa n:n viidellä ja tallentaa vastauksen muuttujaan x |
| * | x=5*5;//25 | kertoo x:n viidellä ja tellentaa vastauksen muuttujaan x |
| % | x=5%4;//1 | %-palauttaa jakolaskun jäännöksen. eli 5/4=1, 5-4*1=1. |
C#:sta löytyy myös jo C:ssä tutuksi tulleet oikotiet muutamaan laskuun. x++; tarkoittaa samaa kuin x=x+1;. Lyhyt versio palauttaa muuttujan alkuperäisen arvon.
Esimerkki
x=5; Console.WriteLine("{0}",x++); // Tulostaa 5 Console.WriteLine("{0}",x); // Tulostaisi nyt 6
Mikäli ++-merkintä on ennen muuttujanimeä, palauttaa kohta käsitellyn arvon, eli arvon johon on lisätty yksi.
x=5; Console.WriteLine("{0}",++x); // Tulostaa 6 Console.WriteLine("{0}",x); // Tulostaisi myös 6
Samalla tapaa toimivat myös merkinnät x-- ja --x, toki pienentäen arvoa (vähennyslasku). Näitä kannattaa käyttää aukikirjoitettujen laskujen sijasta, koska ne ovat tietokoneen kannalta nopeampia suorittaa.
Myös perusmatemaattisista rutiineista löytyy lyhyempiä versioita:
x+=5; // Toimii kuten x = x + 5; x-=5; // Toimii kuten x = x - 5; x/=5; // Toimii kuten x = x / 5; x*=5; // Toimii kuten x = x * 5; x%=5; // Toimii kuten x = x % 5;
Myös nämä merkinnät ovat käännettynäkin tehokkaita.
Ohjausrakenteet
if
if(ehto1) { // Tämä koodi suoritetaan, kun ehto1 on tosi } else if(ehto2) { // Ei välttämätön // Tämä koodi suoritetaan kun ehto1 on epätosi // ja ehto2 on tosi } else { // Ei välttämätön // Tämä koodi suoritetaan kun kaikki ehdot ovat epätosia }
Totuusehdot
| Merkki | Selite | Tosi malli | epätosi malli |
| != | Erisuuri | 6!=4 | 6!=6 |
| == | Yhtäsuuri | 6==6 | 6==4 |
| >= | Pienempi- tai yhtäsuuri kuin | 6>=6 | 6>=10 |
| <= | Suurempi- tai yhtäsuuri kuin | 6<=10 | 7<=4 |
| < | Suurempi kuin | 5<6 | 5<5 |
| > | Pienempi kuin | 12>10 | 5>5 |
| is | Testaa, voidaanko ajonaikainen tyyppi muuntaa toiseksi. Voidaan käyttää vain reference-tyyppien kanssa. | kts. loppuun |
class C1 {...} class C2:C1 {...} C1 c1 = new C1(); C2 c2 = new C2(); if(c1 is C1) //TOSI if(c2 is C1) //TOSI if(c1 is C2) //EPÄTOSI
Ehtojen yhdisteleminen
| && | AND eli molempien oltava tosia |
| || | OR eli riittää, kuin toinen on tosi, niin ehto on tosi. Huomaa, että lause evaluoidaan vasemmalta oikealle. |
Monimutkainen ehtoesimerkki
if ( (alku > 10 && alku < 20) || (alku >= 100 && alku <= 200) { /* tosi jos alku on suurempi kuin 10 ja pienempi kuin 20 tai alku on yhtäsuuri tai suurempi kuin 100 ja yhtäsuuri tai pienempi kuin 200 */ } /* tai vaikka merkit ja sanat sekaisin * tämä on kyllä epäsuositeltava tapa * kannattaa käyttää vain jompaa kumpaa */ if ( (alku > 10 && alku < 20) || (alku >= 100 AND alku <= 200) { /* tekee saman kuin edelliset */ }
FOR
for(int i=0;i<100;i++) { //Tee jotain sata kertaa if(tarkista) { break; //Keskeyttää silmukan heti } if(tarkista2) { continue; //Aloittaa uuden silmukan heti } /* Tänne kirjoitettua koodia ei suoritetan, * jos tarkista2 on tosi */ }
Pilkku-operaattori
for(int i =0, j=1; i<100; i++,j--) { ... }
FOREACH
Käy iteratiivisesti läpi kokoelman (taulukon, listan, hash-taulun jne.) Iteroitavan luokan pitää toteuttaa IEnumerable rajapinta. Iteroinnin aikana kokoelman sisältöä ei saa muuttaa.
vaatii alkuun using System.Collections; //Sisältää luokan ArrayList
ArrayList nimet = new ArrayList(); nimet.Add("Pekka"); nimet.Add("Kalle"); //Perinteinen for silmukka malli for(int i = 0; i < nimet.Count; i++) { Console.WriteLine("{0}",nimet[i]); } //FOREACH silmukalla foreach (string nimi in nimet) { Console.WriteLine("{0}",nimi); }
SWITCH
int arvo = 7; switch(arvo) { case 1: Console.WriteLine("1"); case 2: Console.WriteLine("2"); break; case 3: Console.WriteLine("3"); break; case 4: case 5: Console.WriteLine("Arvo oli joko 4 tai 5"); goto 6; case 6: Console.WriteLine("Arvo oli joko 4, 5 tai 6"); break; default: Console.WriteLine("jotain muuta"); break; }
Esimerkissä
- arvo 7 olisi tulostanut jotain muuta.
- arvo 1 olisi tulostanut 1:n ja 2:n
- arvo 2 olisi tulostanut vain 2:n
- arvo 3 olisi tulostanut vain 3:n
Eli break katkaisee juoksun, kun juoksu taas alkaa valitulla arvolla. Huomaa, että C# estää suorituksen siirtymisen suoraan case-lohkosta toiseen, jos lohko ei ole tyhjä, joten sekä case, että default-lohko pitää päättää lauseella break, return, goto tai throw.
WHILE
int i = 5; while(i<10) { if(i%2 == 0) { //Suoritetaan, jos i on kahdella jaollinen Console.WriteLine("{0}",i); } i++; } break ja continue ovat myös while silmukan käytössä kts. FOR silmukka
DO...WHILE
int i = 11 do { Console.WriteLine("{0}",i); } while(i<10);
arvo 11 tulostetaan, vaikka ehto pienempikuin 10 ei toteudukkaan koskaan.
Goto
Goto:a ei yleensä suositella käytettäväksi, mutta välillä siitä on hyötyä - ainakin käännettäessä vanhoja Fortran-ohjelmia C#:lle.
Esimerkki:
if(ei virhettä) goto sinne; Console.WriteLine("Virhettä tuppaa"); exit; sinne: //ja koodi jatkuu täällä, jos virhettä ei ollut
Goto toimii myös mikäli paluupiste on ollut aiemmin koodissa.
