CS-opas:C-Sharpin alkeet

Mureakuha

Loikkaa: valikkoon, hakuun
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".

LaskuoperaattoriEsimerkkiSelitys
+x=5+5;//10asettaa lisää n:n viisi ja tallentaa vastauksen muuttujaan x
-x=5-5;//0vähentää n:stä viisi ja tellentaa vastauksen muuttujaan x
/x=5/5;//1jakaa n:n viidellä ja tallentaa vastauksen muuttujaan x
*x=5*5;//25kertoo 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

MerkkiSeliteTosi malliepätosi malli
!=Erisuuri6!=46!=6
==Yhtäsuuri6==66==4
>=Pienempi- tai yhtäsuuri kuin6>=66>=10
<=Suurempi- tai yhtäsuuri kuin6<=107<=4
<Suurempi kuin5<65<5
>Pienempi kuin12>105>5
isTestaa, 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.

Henkilökohtaiset työkalut