Tartalomjegyzék
CSharp
Az alábbi leírás Visual 2010 C# Express szoftveren alapszik.
Az itt található anyag jelenleg 2010 tavaszi tanfolyam első napját fedi le. Az anyag csak a tanfolyam ezen napján elhangzottakat tükrözi!
.Net framework kell a programok futtatásához
- Az XP alapból egyiket sem tartalmazza
- 3.0-át tartalmazza a Windows Vista
- 3.5-át tartalmazza a Windows 7
Bevezetés
A C# kisbetű nagybetű érzékeny
Mentések helye:
Dokumentumok\Visual Studio\Projects
Helló Világ
Visual 2010 C# Express alapból:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace hellovilag { class Program { static void Main(string[] args) { Console.WriteLine("Valaiékezetőő"); Console.ReadLine(); } } }
Futtatás F5 vagy eszköztáron.
Változók
Unicod rendszerű a nyelv ezért ékezetek is lehetnek a változónevekben.
- Egyszerű változók
- Objektum típusú változók
- Osztály típusú változó
Egyszerű típusú változók
Például egész változók
- int szám = 0;
Osztály típusú változó
- Például: Dátum tárolása
Először létre kell hozni:
DateTime dátum = new DateTime(2010, 6, 28); Console.WriteLine(dátum.ToLongDateString());
A metódus minden ország saját formátumához igazodik.
Típusok
Egész
int szám = 0; szám = 5 + 6; szám = szám + 5;
Szöveg
string szöveg = ""; szöveg "egy" + "kettő"; Console.WriteLine(szöveg);
Bináris típus
bool bináris = true; bináris = !bináris; //megfordítottuk Console.WriteLine(bináris);
Törtszámok
- float
- double
Példa:
double lebegő = 1.0; lebegő = lebegő / 3; Console.WriteLine(lebegő);
Konstansok
Azt vállaljuk, hogy nem változtatjuk az értékét.
const double lebegő = 1.0;
Enum
Felsorolt típusok
enum Fajta { Dobermann = 1, Rotweiler = 2 };
Konkrét példa
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace hellovilag { class Program { enum Fajta { Dobermann, Rotweiler }; static void Main(string[] args) { Fajta kutya = Fajta.Dobermann; Console.WriteLine("Valami ékezetőő"); Console.ReadLine(); } } }
Az egyenlőség jel után szóköz, megjelenik a Fajta típus.
Operátrok
Értékadó operátorok
szám = szám + 5
rövidebben:
szám += 5;
szám = szám / 5; helyett:
szám /= 5;
Logikai operátorok
Operátor | Jelntés |
---|---|
== | egyenlőség vizsgálat |
| | vagy (mohó) |
& | és (mohó) |
|| | vagy (lusta) |
&& | és (lusta) |
// Szorgos (Mohó) bináris = true | false ; bináris = ture & false; // Lusta bináris = true || false; bináris = true && false;
Egy operandusú operátorok
Operátor | Jelntés |
---|---|
++ | 1-gyel növeli a változó értékét |
Három operandusú operátor
Console.WriteLine(bináris ? "igaz" : "hamis");
Kommentek
// Megjegyzés
Escape karakterek
A escape karaktereket visszaperjellel vezetjük be.
- sortörés \n
Hibakövetés
- Piros aláhúzás: szintaktikai hiba
- Zöld aláhúzás: szemantikai hiba
- Pl. sosem használunk egy változót
- Kék aláhúzás: Futtatáskor észlelet hibák
Tömbök
int[] tömb = new int[100]; tömb[3] = 15;
A tömbök indexelése 0-val kezdődik. Egy int[100] esetén a legnagyobb index 99
Listák
Egy láncolt lista létrehozása
List<int> lista = new List<int>();
Hozzáfűzés a listához:
lista.Add(15);
Törlés a listából:
lista.Remove(15);
Ha többször is szerepel benne, csak az elsőt törli.
Címzés mint a tömböknél:
szám = lista[0];
Törlés index szerint:
lista.RemoveAt(1);
Szelekció
if
if (feltétel)
tevékenység; if (feltétel) tevékenység; else tevékenység2;
Ha feltétel igaz, akkor teszünk valamit. Ha hamis akkor mást.
if (bináris == true) { Console.WriteLine("igaz"); }
Két elágazásra példa
if (bináris == true) { Console.WriteLine("igaz"); } else if (szám > 10) { Console.WriteLine("nagy"); }
Három elágazásra példa:
if (bináris == true) { Console.WriteLine("igaz"); } else if (szám > 10) { Console.WriteLine("nagy"); } else { Console.WriteLine("egyébként"); }
Az else if esetén kiveszem az else részt akkor az if-től egy önálló if blokk következik
switch
Csak egyszerű változókat fogad el.
int szám = 3; switch(szám) { case 1: Console.WriteLine("Egy"); break; case 2: Console.WriteLine("Kettő"); break; case 3: goto case 2; default: Console.WriteLine("Egyik sem"); break; }
Iteráció
for
A for ciklussal növekményes ciklust tudunk létrehozni.
for (kezdő_érték; feltétel; növekmény)
for ( int i = 0; i < 10; i++) { //utasítások }
while
Amíg a kifejezés igaz addig fut
while(kifejezés) { }
Egy végtelen ciklus:
while(true) { }
do while
int i = 1; do { Console.WriteLine("Egyik sem"); i++; }while (i < 10);
foreach
Egy lista vagy tömb elemeit vesszük
Lista létrehozása és végigjárása
List<int> lista = new List<int>(); lista.Add(15); lista.Add(10); lista.Add(20); lista.Add(42); lista.Add(30); foreach(int i in lista) { Console.WriteLine(i); }
Szöveges tömb létrehozása és bejárása
string[] tömb = new string[3]; tömb[0] = "Máté"; tömb[1] = "Márk"; tömb[2] = "Lukács"; foreach(string str in tömb) { Console.WriteLine(str); }
Build
Csak fordítás
Függvények
Eddig csak Main nevű függvényt használtunk.
Módosító_szavak Visszatérési_érték Név Paraméterek
Operátor túlterhelés
Ugyanazon a néven több függvény is lehet, ha különbözik a paraméterük.
Típus | Jelentés |
---|---|
void | Nincs vissaztérési érték |
Paraméter típusok
- érték szerinti
- Referencia
- Out paraméter
Módosítók típusai
- public
- külsőleg hívható
- protected
- védett csak a saját osztályok és azok leszármozattai hívhatják
- private
- leszármazottak sem hívhatják
Static módosító
Statikus
Nem kell létrehozni példányt
Nem statikus
Létre kell hozni egy példányt a használatához
Összeadó függvény példa
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace hellovilag { class Program { static void Main(string[] args) { Console.WriteLine(Összead(3,2)); Console.ReadLine(); } static public int Összead(int a, int b) { int érték = a + b; return érték; } } }
Több értéket szeretnénk visszakapni
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace hellovilag { class Program { static void Main(string[] args) { Console.WriteLine(Összead(3,2)); int eredmény; Szoroz(1, 2, out eredmény); Console.WriteLine(eredmény); Console.ReadLine(); } static public int Összead(int a, int b) { int érték = a + b; return érték; } public static void Szoroz(int a, int b, out int c) { c = a * b; } } }
Osztályok
Az osztály egy egész, az objektum egy konkrét példány
Öröklés, származtatás
labda osztály
Két leszármazott
- amerikai_labda
- szimpla_labda
Minden objektumnak egyetlen közös őse van: Object
Osztályok tartalma
- Metódusok
- Osztály szintű változók
Objektum példa
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace hellovilag { class Program { static void Main(string[] args) { Console.ReadLine(); } class Labda { public void Rúg(); private void Felfúj(); } } }
Öröklésre, származtatásra példa
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace hellovilag { class Program { static void Main(string[] args) { Labda labda; labda = new AmerikaiLabda(); labda.Rúg(); Console.ReadLine(); } abstract class Labda { abstract public void Rúg(); //abstarct public void Felfúj(); } class AmerikaiLabda : Labda { public override void Rúg() { Console.WriteLine("Rúg"); } } class EurópaiLabda : Labda { public override void Rúg() { Console.WriteLine("Csapva"); } } } }
Tulajdonságok
Lehetővé teszik érték lekérdezést kontrollált módon.
Példa kedvéért a labdának adjuk egy szín tulajdonságot.
prop begépelve kódkiegészítő ablak ugrik elénk.
Két tab-ra tulajdonságot beírja.
class AmerikaiLabda : Labda { public int Méret { get; set; } public override void Rúg() { Console.WriteLine("Rúg"); } }
Létrejön egy int típusú változó az objektumban.
Objektumok típusai
Objektumok konvertálása
- Meghívok egy metódust, ami átkonvertálja
- Automatikus konvertálás → Kasztolás
Konvertálás metódussal
Például szöveg konvertálása egésszé:
int a = int.Parse("5");
Kasztolás
int a = 5; double b = (double)a;
A kasztolás osztályokon is működik
Hibakezelés
- kivételkezelés
- debugolás
Kivételkezelés
Speciális kivételosztályokat használunk
Van egy kivétel alaposztály, ebből több fajta kivétel van származtatva. Szabványosan tudjuk kezelni a programban fellépő hibákat. A cél az összeomlás nélküli működés.
Kivételt úgy kezeljük, hogy „elkapjuk”
Kivétel dobása
throw
throw new Exception
Eddig csak annyit ír ki, hogy hiba.
Ezért üzenet írunk:
throw new Exception("Nem működik a képernyő");
Felveszünk egy újabb metódust, amiben elhelyezzük az eldobást:
static void HibásUtasítás() { // valami kód throw new Exception("Nem működik a képernyő"); }
Kivétel elkapása
Meg kell saccolnunk hol lehet majd hiba. Ott try utasítással elkapjuk a kivételt:
Kapd el:
try
Ha elkaptál egy kivételt tedd az e változóba:
catch(Exception e)
try { HibásUtasítás(); } catch(Exception e) { Console.WriteLine("Hiba! " + e.Message); Console.ReadLine(); }
Final
Érzékeny erőforrások esetén le kell zárni azt, fel kell oldani a foglalását. Memóriaszivárgás léphet fel az el nem engedett erőforrások kapcsán.
try { HibásUtasítás(); } catch(Exception e) { Console.WriteLine("Hiba! " + e.Message); Console.ReadLine(); } finally { //Erőforrások lezárása }
Ha nem volt hiba a catch részt átugorjuk és a finallay rész mindenképpen végrehajtásra kerül.
A kivételek típusa alapján szétválaszthatók:
try { HibásUtasítás(); } catch(FormatException e) { Console.WriteLine("Hiba! " + e.Message); Console.ReadLine(); } finally { //Erőforrások lezárása }
A példában formátum kivétel esetén írjuk ki az adott hibaüzenetet.
Debuger
A memóriát lépésről lépésre képes vagyok kezelni.
A programba bele kell fordítani a debugolási információkat. A Visual Studió ezeket automatikusan bele teszi.
Release módban nem kerülnek bele a kódba a debug információk, de gyorsabban fut.
BreakPoint
A szerkesztő ablak baloldalán kattintok breakpointot szúrok be.
A program mindig megáll amikor a futtatás az adott kódrészhez ér.
Watch
Változó felett: Jobb gomb -> AddWach
Stack
A program végrehajtása során hívásokat tároljuk itt
Immediate Window
A kód szerkesztése nélkül tudunk kódrészeket beleírni. Például a lista egyik elemét töröljük.
Végrehajtás lépésenként
Program futásának követése
F10 gombot nyomogatva léptetni tudjuk a programot.
Nehézség több szálas programok debugolásánál fordul elő.
Fájlkezelés
Amivel dolgozunk
- Olvasó objektum
- Adatforrás objektum
Hasonlóan írunk olvasunk fájlokba, memóriába.
Fájl megnyitása olvasásra
using System; using System.IO; namespace hellovilag { class Program { static void Main(string[] args) { StreamReader reader = new StreamReader(new FileStream(@"c:\test.txt", FileMode.Open)); while (!reader.EndOfStream) { Console.WriteLine(reader.ReadLine()); } reader.Close(); Console.ReadLine(); } } }
Ha egy Sztring elé @ karaktert teszünk az escape szekvenciák nem kerülnek behelyettesítésre.
@"c:\test.txt"
Windows Formok
Különbségek az eddigiekhez:
- Eseményvezérelt módon dolgozunk.
- Űrlapokkal dolgozunk
Minden amit használunk egy-egy osztály.
Visual Studoban:
Új projekt -> WindowsFormsApplication
View -> Other Windows -> Solutions Exploler
View -> Other Windows -> ToolBox
Rajzszögre kattintunk
View -> Other Windows -> Properties Window
Előkészítés
Form1 Load esemény
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } } }
- sender ki küldte az objektumot
- e paraméterek
mbox tab tab
MessageBox.Show("Test");
Egy komplett program:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { VálasztócomboBox.Items.Add("Körte"); VálasztócomboBox.Items.Add("Alma"); VálasztócomboBox.Items.Add("Barack"); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show(VálasztócomboBox.Text); } } }
Konkrét példa megoldása
StreamReader reader = new StreamReader(new FileStream(@"c:\adat.txt", FileMode.Open)); string str; string[] stomb; while (!reader.EndOfStream) { str = reader.ReadLine(); stomb = str.Split(':'); str = stomb[0] + ", " + stomb[1] + " Ft, " + stomb[2]; listBox1.Items.Add(str); } reader.Close();
private void BetöltésGomb_Click(object sender, EventArgs e) { StreamReader reader = new StreamReader(new FileStream(@"c:\adat.txt", FileMode.Open)); string str; string[] stomb; while (!reader.EndOfStream) { str = reader.ReadLine(); stomb = str.Split(':'); str = stomb[0] + ", " + stomb[1] + " Ft, " + stomb[2]; listBox1.Items.Add(str); } reader.Close(); HozzáadásGomb.Enabled = true; //betöltve = true; }