C#-perusteet - luento 1
- Luentotaltiointi
- .NET Framework
- Common Language Infrastructure (CLI)
- Hello World
- Tietotyypit
- Varattuja sanoja
- Ehtolauseet ja silmukat
- Taulukot
- Merkkijonot
- C#-kielen ominaisuuksia
- Luokat
- Lisätietoa
Luentotaltiointi
Ongelmia videon katselussa?C# (lausutaan: C sharp) on Microsoftin kehittämä olio-ohjelmointikieli
C# on ECMA-organisaation standardoima kieli
C# on tulkattu kieli
Muistuttaa syntaksiltaan C++- ja Java-kieliä.
Kaikki muuttujat ovat tyypitettyjä
Isoilla ja pienillä kirjaimilla on merkitystä
C#:ssa on pelkästään olioita
Automaattinen roskien keruu (Garbage collection)
Kaikki muuttujat pitää alustaa ennen käyttöä
Tukee osoittimia (unsafe)
Tukee ominaisuuksia (properties), indeksoijia, delegaatteja, tapahtumia, muuttujien välitystä viitteinä
Nimeämiskäytäntö: Sama kuin Pascal-kielessä eli kaikkien sanojen ensimmäiset kirjaimet kirjoitetaan kapiteeleilla.
.NET Framework
- .NET Framework on Microsoftin kehittämä ohjelmistokomponenttikirjasto
- Toimii vain Windows-ympäristöissä. Tulevaisuudessa voi toimia muuallakin.
- C# käyttää .NET-kirjastoa
- .NET pitäisi olla kielineutraali. Sopivan kielen pitää tukea Common Type Systemiä (CTS). Lisäksi CTS:n osajoukko nimeltään Common Language Specification (CLS) määrää miten tehdään komponentit joiden halutaan toimivan kieliriippumattomasti.
- Base Class Library
- Framework Class Library (FCL
Common Language Infrastructure (CLI)
Common Language Infrastructure on ympäristö jossa voidaan suorittaa korkean tason ohjelmointikielillä tehtyjä ohjelmia erilaisissa tietokoneympäristöissä. CLI on käytännössä ECMA-standardi, joka määrittelee .NET-rajapinnan. CLIn toteutuksia ovat mm. Microsoftin Rotor, Mono ja Portable .NET
Common Language Runtime (CLR)
- CLR on Microsoftin toteutus CLI-ympäristöstä
- CLR suorittaa kunkin ohjelman omassa hiekkalaatikossaan
- CLR-ympäristössä ohjelmat ovat Common Intermediate Language (CIL) -muodossa
- Ohjelman suorituksen aikana CIL-muotoinen ohjelma käännetään (Just-in-time) ajoympäristössä toimivaan muotoon
Hello World
using System; // using on vastaava kuin Javan import // "Hello World!" -ohjelma C#-kielellä namespace HelloWorld // namespace on vastaava kuin Javan package { /// Tämä on dokumentaatiokommentti (vrt. javadoc) class Hello { static void Main() { Console.WriteLine("Hello World!"); // System.Console.ReadKey(); } } /* myös monen rivin kommentit toimivat */ }
- Ohjelman suoritus alkaa luokan Main-metodista
- Main-metodi voi palauttaa void tai int
- Main-metodin parametreina voidaan lukea komentoriviargumentit:
static void Main(string[] args)
- Kooditiedoston nimellä tai sen sisältämien luokkien muodolla tahi määrällä ei ole rajoituksia
- Jos tiedostossa on useampia luokkia joilla on Main-metodi niin käynnistyessä suoritettava Main pitää määrätä käännösaikana
Tietotyypit
- bool
- char
- sbyte etumerkillinen, 8-bit
- byte etumerkitön, 8-bit
- short etumerkillinen, 16-bit
- ushort etumerkitön, 16-bit
- int
- uint
- long
- ulong
- float
- double
- decimal 128-bittinen desimaaliluku 28 merkitsevällä numerolla
- true
- false
- null
- void
Varattuja sanoja
Seuraavassa on lueteltu joitakin Javasta poikkeavia c#-kielen käyttämiä sanoja. Näiden käyttämiseen palataan myöhemmin kurssin aikana.
- delegate
- enum
- event
- this
- operator
- struct
- params
- out
- ref
- as
- is sama kuin Javan instanceof
- typeof
- base sama kuin javan super
- explicit
- implicit
- fixed
- sizeof
- stackalloc
- unsafe
Varattuja sanojakin voidaan käyttää metodien ja muuttujien niminä jos niihin laitetaan etuliitteeksi @.
Ehtolauseet ja silmukat
Ehtolauseet ja silmukat toimivat hyvin samaan tapaan kuin Javassa. Lisäyksenä kuitenkin foreach-silmukka ja goto-käsky.
foreach (int apu in array3) { Console.WriteLine(apu); }
Taulukot
- Taulukko voi olla yksi- tai moniulotteinen.
- Numeeriset taulukot alustetaan automaattisesti nollaksi ja referenssitaulukot nulliksi
- Taulukon indeksit alkavat nollasta
class TestArraysClass { static void Main() { // Declare a single-dimensional array int[] array1 = new int[5]; // Declare and set array element values int[] array2 = new int[] { 1, 3, 5, 7, 9 }; // Alternative syntax int[] array3 = { 1, 2, 3, 4, 5, 6 }; // Declare a two dimensional array int[,] multiDimensionalArray1 = new int[2, 3]; // Declare and set array element values int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } }; // Declare a jagged array int[][] jaggedArray = new int[6][]; // Set the values of the first array in the jagged array structure jaggedArray[0] = new int[4] { 1, 2, 3, 4 }; } }
Merkkijonot
- Valmiita merkkijonoja ei voi muuttaa
string s = "Hello, World!"; string hello = "Hello\nWorld!"; string filePath = "\\\\My Documents\\"; string p2 = @"\\My Documents\My Files\"; int year = 1999; string msg = "Eve was born in " + year.ToString(); string s4 = "Hello, World"; char[] arr = s4.ToCharArray(0, s4.Length); System.Console.Write(s4[3]);
C#-kielen ominaisuuksia
int myInt = 5; if (myInt < 0) // ehdon pitää palauttaa true tai false. Console.WriteLine("Your number {0} is less than zero.", myInt); else Console.WriteLine("Your number {0} is more than zero.", myInt); switch (myInt) { case 0: Console.WriteLine("Your number is {0}.", myInt); break; case 1: Console.WriteLine("Your number is {0}.", myInt); break; case 2: Console.WriteLine("Your number is {0}.", myInt); break; default: Console.WriteLine("Your number {0} is not between 0 and 2.", myInt); break; }
Luokat
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace hello { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); // Alternative syntax int[] array3 = { 1, 2, 3, 4, 5, 6 }; foreach (int apu in array3) { Console.WriteLine(apu); } Henkilo tommi = new Henkilo("Tommi", "Lahtonen"); tommi.Tulosta(); Duunari antti = new Duunari("Antti", "Ekonoja", "yliopistonopettaja"); antti.Tulosta(); Henkilo[] taulukko = { tommi, antti }; foreach (Henkilo p in taulukko) { p.Tulosta(); } antti.ika = -5; antti.Tulosta(); antti.ika = 25; antti.Tulosta(); Console.ReadKey(); } } } public class Henkilo { protected string etunimi; protected string sukunimi; public Henkilo() { etunimi = "Matti"; sukunimi = "Meikäläinen"; } public Henkilo(string etu, string suku) { etunimi = etu; sukunimi = suku; } // entäs virtual // public virtual void Tulosta() public void Tulosta() { Console.WriteLine(this.etunimi); Console.WriteLine(this.sukunimi); } ~Henkilo() { Console.WriteLine(this.etunimi + " " + this.sukunimi + " dies"); } } public class Duunari : Henkilo { private string tehtava; public Duunari(string etu, string suku, string tehtava) // public Duunari(string etu, string suku, string tehtava) // : base(etu, suku) { this.etunimi = etu; this.sukunimi = suku; this.tehtava = tehtava; } // mitäs jos new korvataan sanalla override? // public override void Tulosta() public new void Tulosta() { base.Tulosta(); Console.WriteLine(this.tehtava); Console.WriteLine(ika); } private int m_ika = 20; public int ika { get { return m_ika; } set { if (value> 0) m_ika = value; } } }
Käyttäjien kommentit